如何将聚合初始化列表推送到向量中?

时间:2014-03-18 13:53:08

标签: c++ c++03

我正在尝试写这样的东西:

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样式。有没有办法做到这一点?

1 个答案:

答案 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)));