typedef unsigned char u8;
template <u8 N>
class matrix {
public:
matrix(const std::initializer_list<std::initializer_list<int>>& l);
private:
std::array<std::array<int, N>, N> arr;
};
template <u8 N>
matrix<N>::matrix(const std::initializer_list<std::initializer_list<int>>& l) : arr(l) {}
错误C2664: 'std :: array,2> :: array(std :: array,2> &&)':无法从'const转换参数1 std :: initializer_list>'为'const std :: array,2>&'
如何从2D std::array
初始化2D std::initializer_list
(或C数组)?
答案 0 :(得分:1)
y = x[start:stop:step] if step > 0 else x[stop:start:step]
是一个汇总。这意味着您可以通过 braced-init-list 之类的
std::array
在构造函数中,尽管您没有 braised-init-list ,但您有一个std::array<int, 4> foo = {1,2,3,4};
,该{}不能用于初始化std::initlizer_list
。您需要做的是将数据从std::array
复制到数组中,例如
std::initlizer_list
还请注意,您不必传递template <u8 N>
matrix<N>::matrix(std::initializer_list<std::initializer_list<int>> l)
{
u8 counter = 0;
for (auto row : l)
std::copy(row.begin(), row.end(), arr[counter++].begin());
}
引用。这是一个轻量级的对象,按值传递可以,不会复制底层元素。
您可以更改类以将2d数组作为参数,以便您可以直接用其初始化std::initlizer_list
,但是由于how you have to initialize aggregates of aggregates的原因,您会陷入大括号的境地,因为代码将变为>
arr