对不平凡的多变量类使用brace-init

时间:2018-11-17 01:01:04

标签: c++ constructor initialization initializer-list curly-braces

我正在尝试使某些模板类括号可初始化,例如

SomeNamespace2\someTrait

但是,我在实现时遇到了麻烦。我希望能够做到:

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};

但这对我不起作用。救命!

1 个答案:

答案 0 :(得分:3)

为了从initializer_list转换为向量,您可以复制所有元素。 STL通过begin / end迭代器使它非常漂亮。这是向量所有可能的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)
    {

    }