对非平凡的多变量使用 brace-init class
Using brace-init for a non-trivial multi-variable class
我正在尝试制作某个模板 class 大括号可初始化,例如
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);
};
但是,我在实现方面遇到了问题。我希望能够做到:
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};
我试过:
template<typename T>
Matrix<T>::Matrix(std::initializer_list<T> list)
: _data(*list.begin()),
_m(*(list.begin() + 1)),
_n(*(list.begin() + 2)) {}
但这对我不起作用。求助!
为了将 initializer_list 转换为矢量,您可以复制所有元素。
STL 使用 begin/end 迭代器使这非常好。这是 vector
的所有可能 constructors
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)
{
}
我正在尝试制作某个模板 class 大括号可初始化,例如
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);
};
但是,我在实现方面遇到了问题。我希望能够做到:
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};
我试过:
template<typename T>
Matrix<T>::Matrix(std::initializer_list<T> list)
: _data(*list.begin()),
_m(*(list.begin() + 1)),
_n(*(list.begin() + 2)) {}
但这对我不起作用。求助!
为了将 initializer_list 转换为矢量,您可以复制所有元素。 STL 使用 begin/end 迭代器使这非常好。这是 vector
的所有可能 constructors 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)
{
}