C++ 如何将带括号的init列表传递给'std::array`’;谁的构造函数?
是否可以将带括号的init列表传递给C++ 如何将带括号的init列表传递给'std::array`’;谁的构造函数?,c++,arrays,c++11,constructor,list-initialization,C++,Arrays,C++11,Constructor,List Initialization,是否可以将带括号的init列表传递给std::array的构造函数?这可能是必要的,因为std::array不支持初始值设定项列表分配 为了适应这个问题的公认答案:(答案的缩短链接:)针对我的问题,我提出了以下“解决方案”,解决了将带括号的init列表传递给std::array的构造函数的问题: template<class T, std::size_t N> struct ArrayWrapper { std::array<T,N> arr; Array
std::array
的构造函数?这可能是必要的,因为std::array
不支持初始值设定项列表分配
为了适应这个问题的公认答案:(答案的缩短链接:)针对我的问题,我提出了以下“解决方案”,解决了将带括号的init列表传递给std::array
的构造函数的问题:
template<class T, std::size_t N> struct ArrayWrapper
{
std::array<T,N> arr;
ArrayWrapper(T &&... init) : arr{{std::forward<T>(init)...}} {}
}
模板结构ArrayWrapper
{
std::阵列arr;
ArrayWrapper(T&…init):arr{{std::forward(init)…}{}
}
我希望这将允许以下语法:
int main()
{
ArrayWrapper<int, 4> aw{{1,2,3,4}};
std::cout << aw.arr[2] << '\n';
}
intmain()
{
阵列振打器aw{{1,2,3,4};
std::coutT&&…init
是一个不包含包的包扩展,因此它不会工作。std::array
是一个聚合–它没有构造函数,我不确定是什么文档让您相信它会。这可能是必要的,因为std::array
不支持初始值列表分配那么?也就是说,为什么你认为这是一个问题?这里的最终目标是专门支持这种语法:ArrayWrapper-aw({1,2,3,4});
?是不是ArrayWrapper-aw(1,2,3,4);
可以接受?那么ArrayWrapper-aw({1,2,3,4})呢
?这闻起来很像…@ildjarn我正在尝试编写一个包装器,它将支持std::array
支持的所有语法。按照std::array
必须支持带括号的init list赋值,即以下语法:std::array arr({1,2,3,4})既然std::array
支持这种语法,我希望我的包装器也支持这种语法。根据您的编辑,像ArrayWrapper(T const(&a)[N]){std::copy(a,a+N,arr.data());}
,但我不知道它是否真的具有您想要的语义。。。
ArrayWrapper(T &&... init) : arr{{std::forward<T>(init)...}} {}