如何将聚合初始化器列表推入向量

How can I push an aggregate initialiser list into a vector?

本文关键字:列表 向量 初始化      更新时间:2023-10-16

我想写这样的东西:

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。我仍然希望能够使用聚合初始化风格。有什么办法吗?

uniform-initialization方面使用带括号的初始化器是c++ 11引入的一个特性。

如果你不想启用这样的编译器支持,你很自然地被迫使用你在早期标准中拥有的;正如您已经发现的,它不包括uniform-initialization


一个简单的"hack"可能会减轻你的痛苦,如下所示:

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