C++ 对非平凡多变量类使用brace init
我试图使某个模板类brace可初始化,例如C++ 对非平凡多变量类使用brace init,c++,constructor,initialization,initializer-list,curly-braces,C++,Constructor,Initialization,Initializer List,Curly Braces,我试图使某个模板类brace可初始化,例如 template<typename T> class A { private: std::vector<T> _data; std::size_t _m; std::size_t _n; public: Matrix(std::size_t m, std::size_t n, const T &fill); // regular (non-
template<typename T>
class A {
private:
std::vector<T> _data;
std::size_t _m;
std::size_t _n;
public:
Matrix(std::size_t m, std::size_t n, const T &fill); // regular (non-trivial) constructor
Matrix(std::initializer_list<T> list);
};
模板
甲级{
私人:
std::vector_数据;
标准::尺寸t m;
标准:尺寸;
公众:
矩阵(std::size_t m,std::size_t n,const t&fill);//正则(非平凡)构造函数
矩阵(标准:初始值设定项列表);
};
然而,我在实现上遇到了困难。我希望能够做到:
A<int> a = {{1, 2, 3, 4}, 2, 2};
// or something similar...e.g. C++11 style brace-init
A<int> a {{1, 2, 3, 4}, 2, 2};
A={{1,2,3,4},2,2};
//或者类似的东西。C++11样式大括号初始化
A A{{1,2,3,4},2,2};
我试过:
template<typename T>
Matrix<T>::Matrix(std::initializer_list<T> list)
: _data(*list.begin()),
_m(*(list.begin() + 1)),
_n(*(list.begin() + 2)) {}
模板
矩阵::矩阵(std::初始值设定项\u列表)
:_数据(*list.begin()),
_m(*(list.begin()+1)),
_n(*(list.begin()+2)){}
但这对我不起作用。救命啊 为了从初始值设定项列表转换为向量,您可以复制所有元素。 STL使用begin/end迭代器实现了这一点。下面是向量的所有可能结果
Matrix(std::initializer_list<T> list, std::size_t m, std::size_t n)
: _data(list.begin(), list.end()) // This is what might help
, _m(m)
,_n(n)
{
}
矩阵(std::initializer\u列表,std::size\u t m,std::size\u t n)
:_data(list.begin(),list.end())//这可能会有所帮助
,_m(m)
,_n(n)
{
}
矩阵(std::initializer\u列表,std::size\u t m,std::size\u t n)哇,你真是个天才。从来没有想过列表之后会有额外的参数。我不知道为什么;这很有道理。谢谢