对于使用结构定义的C用户类型,是否有某种方法可以使用某种默认构造函数(如C++版本)?
我已经有一个像快速初始化程序(就像那个一样)的宏,pthread_mutex但我想知道你是否可以在声明中填充结构的某些(或所有)字段.
例如,通过这个pthread_mutex例子,我想
pthread_mutex_t my_mutex;
Run Code Online (Sandbox Code Playgroud)
具有相同的效果
pthread_mutex_t my_mutex = PTHREAD_MUTEX_INITIALIZER;
Run Code Online (Sandbox Code Playgroud) 有没有更好的方法来初始化C++代码中的C结构?
我可以在变量声明点使用初始化列表; 但是,如果在编译时不知道所有参数,或者如果我没有声明本地/全局实例,那么这没有用,例如:
遗留C代码,它声明了结构,并且还使用了API
typedef struct
{
int x, y, z;
} MyStruct;
Run Code Online (Sandbox Code Playgroud)
使用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);
}
Run Code Online (Sandbox Code Playgroud)
创建本地实例然后一次设置一个成员(myStruct.x = 5;等)是一个真正的痛苦,当尝试将20个不同的项添加到容器时有点难以阅读...