如何将braced-init-list传递给`std :: array`的构造函数?

时间:2016-11-14 23:54:15

标签: c++ arrays c++11 constructor list-initialization

是否可以将确切的braced-init-list传递给std::array的构造函数?这可能是必要的,因为std::array不支持初始化列表分配。

尝试调整此问题的已接受答案:How to construct std::array object with initializer list?(答案缩短链接:https://stackoverflow.com/a/6894191/4385532)我的问题,我想出了以下“解决方案”来解决通过问题的问题 - init-list到std::array的构造函数:

template<class T, std::size_t N> struct ArrayWrapper
{
    std::array<T,N> arr;
    ArrayWrapper(T &&... init) : arr{{std::forward<T>(init)...}} {}
}

我希望这会允许以下语法:

int main()
{
  ArrayWrapper<int, 4> aw{{1,2,3,4}};
  std::cout << aw.arr[2] << '\n';
}

然而,我失败了。这不会编译:http://ideone.com/VJVU1X

我不确定我的错误是什么。我希望这一行

ArrayWrapper(T &&... init) : arr{{std::forward<T>(init)...}} {}

将捕获传递给ArrayWrapper的构造函数的braced-init-list的确切元素,并将它们转发给std::array的构造函数。

我怎么理解不到?

0 个答案:

没有答案