我必须填写std::vector类型的元素struct MHD_OptionItem.这个结构有这个实现:
struct MHD_OptionItem
{
enum MHD_OPTION option;
intptr_t value;
void *ptr_value;
};
Run Code Online (Sandbox Code Playgroud)
我试过这种方式:
vector<struct MHD_OptionItem> iov;
if(...)
iov.push_back({ MHD_OPTION_NOTIFY_COMPLETED, requestCompleted, NULL });
if(...)
iov.push_back({ MHD_OPTION_CONNECTION_TIMEOUT, connectionTimeout });
[....]
Run Code Online (Sandbox Code Playgroud)
但正如预期的那样,g ++编译器对我说:
warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
我知道我可以初始化一个临时结构,然后将它传递给向量,但这种方法在我看来效率低下而且不那么优雅.
我无法更改插入构造函数的结构,因为这不是我的代码,而是包含库.
有一种优雅的方法可以在不使用c ++ 0x语法的情况下完成此操作吗?
假设您无法更改struct或者您想要将其保留为POD:
void f()
{
struct {
MHD_OptionItem operator ()(enum MHD_OPTION opt, intptr_t val, void *ptr = 0) {
MHD_OptionItem x = {opt, val, ptr};
return x;
}
} gen;
vector<struct MHD_OptionItem> iov;
if(...)
iov.push_back(gen(MHD_OPTION_NOTIFY_COMPLETED, requestCompleted, NULL));
if(...)
iov.push_back(gen(MHD_OPTION_CONNECTION_TIMEOUT, connectionTimeout));
[....]
}
Run Code Online (Sandbox Code Playgroud)
另一种方案:
struct Gen : MHD_OptionItem {
Gen(enum MHD_OPTION opt, intptr_t val, void *ptr = 0) {
option = opt;
value = val;
ptr_value ptr;
}
};
vector<struct MHD_OptionItem> iov;
if(...)
iov.push_back(Gen(MHD_OPTION_NOTIFY_COMPLETED, requestCompleted, NULL));
if(...)
iov.push_back(Gen(MHD_OPTION_CONNECTION_TIMEOUT, connectionTimeout));
[....]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1290 次 |
| 最近记录: |