gpt4 book ai didi

c++ - 在 C++ 代码中初始化 C 结构

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:41 26 4
gpt4 key购买 nike

有没有更好的方法在 C++ 代码中初始化 C 结构?

我可以在变量声明点使用初始化列表;然而,如果在编译时所有参数都未知,或者如果我没有声明本地/全局实例,这就没有那么有用了,例如:

声明结构的遗留 C 代码,还有使用它的 API

typedef struct
{
int x, y, z;
} MyStruct;

使用 C 库的 C++ 代码

void doSomething(std::vector<MyStruct> &items)
{
items.push_back(MyStruct(5,rand()%100,items.size()));//doesn't work because there is no such constructor
items.push_back({5,rand()%100,items.size()});//not allowed either

//works, but much more to write...
MyStruct v;
v.x = 5;
v.y = rand()%100;
v.z = items.size();
items.push_back(v);
}

创建本地实例然后一次设置每个成员(myStruct.x = 5; 等)真的很痛苦,并且在尝试向其中添加 20 个不同的项目时有点难以阅读容器...

最佳答案

如果您不能添加构造函数(这是 C++03 中的最佳解决方案,但您可能有与 C 的兼容性约束),您可以编写具有相同效果的函数:

MyStruct makeAMyStruct(int x, int y, int z)
{
MyStruct result = { x, y, z };
return result;
}

items.push_back(makeAMyStruct(5,rand()%100,items.size()));

编辑:我现在已经检查过 C++0X 是否为这个精确的问题提供了一些东西:

items.push_back(MyStruct{5,rand()%100,items.size()});

在 g++ 4.4 中可用。

关于c++ - 在 C++ 代码中初始化 C 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1994841/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com