在Ctor调用

时间:2015-11-25 19:05:47

标签: c++ templates matrix constructor

我正在编写一个简单的库,其中易用性和稳定性是首要任务。例如,在我的Mat(Matrix)类中,当前的构造函数签名是

Mat<ushort rows, ushort cols> A(std::initializer_list<double>);

在实践中非常容易阅读和理解:

Mat<2, 2> A{1, 2, 3, 4};

这开始似乎是一个好主意,因为我可以执行static_assert调用来检查是否尝试使用0来实例化Matrix或列模板参数,但显然意味着我无法动态实例化矩阵对象。

理想情况下,我希望有一些基本的内容

Mat(uchar rows, uchar cols, std::initializer_list<double>)

以这种方式我可以通过编写以下内容来实例化所述对象:

Mat A(2, 2) {1, 2, 3, 4};

我不知道如何解决这个问题,因为初始化列表必须包含在括号参数列表中,这个列表看起来并不干净:

Mat A(2, 2, {1, 2, 3, 4});

1 个答案:

答案 0 :(得分:1)

我断言你试图避免使用模板,我建议定义operator =(它不是你想要的但可能有用)

 Mat &operator=(std::initialize_list<int> c);

所以你可以上课:

 Mat A(2,2);
 A={1,2,3,4};