c++ - 将括号初始化用于非平凡的多变量类

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

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

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)) {}

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

最佳答案

为了从初始化列表转换为 vector ,您可以复制所有元素。 STL 通过开始/结束迭代器使这一点变得非常好。这是所有可能的constructors对于 vector

    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)
    {

    }

关于c++ - 将括号初始化用于非平凡的多变量类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53347247/

相关文章:

c++ - 将字符串插入二维 vector 的指定位置

c++ - 随机化代码块

java - 制作一个接受整数数组的构造函数

java - AsyncTask 类中的标志在主类中无法正常工作

c++ - 使用空的 weak_ptr 作为参数调用 map::count 是否安全?

c++ - 初始化指针传递的数组

c++ - 依赖注入(inject)库的正确比喻是什么?

c++ - 对 C++ 字符串的二进制搜索不起作用

c++ - 使用标准构造函数传递临时对象

c++ - 不同子类的构造函数中的个性化名称