Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将带括号的init列表传递给'std::array`’;谁的构造函数?_C++_Arrays_C++11_Constructor_List Initialization - Fatal编程技术网

C++ 如何将带括号的init列表传递给'std::array`’;谁的构造函数?

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

是否可以将带括号的init列表传递给
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::cout
T&&…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)...}} {}