我正在尝试写这样的东西:
vector<iovec> iovecs;
iovec io = {&foo, sizeof(foo)};
iovevs.push_base(io);
这对编译器来说没问题。
现在我正在尝试将其转换为更简洁的内容,例如:
vector<iovec> iovecs;
iovecs.push_back({&foo, sizeof(foo)});
但我被拒绝,错误信息如:
warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
我不想启用c ++ 0x。我仍然希望能够使用聚合init样式。有没有办法做到这一点?
答案 0 :(得分:3)
在统一初始化方面使用 braced-initializer 是C ++ 11引入的一项功能。
如果您不想启用此类编译器支持,您很自然地被迫使用早期标准中的内容;正如您已经发现的那样,它不包括uniform-initialization。
一个简单的“黑客”可能会减轻你的痛苦,如下所示:
template<typename T, typename U>
iovec make_iovec (T const& a, U const& b) {
iovec ret = {a, b};
return ret;
}
iovecs.push_back (make_iovec (&foo, sizeof(foo)));