gpt4 book ai didi

c++ - 在 Ctor 调用中将 std::initializer_list 与括号括起来的参数分开

转载 作者:行者123 更新时间:2023-11-28 05:57:10 25 4
gpt4 key购买 nike

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

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

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

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

起初这似乎是个好主意,因为我可以执行 static_assert调用以检查是否尝试使用列或行模板参数 0 实例化 Matrix,但这显然意味着我无法动态实例化 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});

最佳答案

我不明白你尽量避免使用模板,我建议定义 operator= (这不是你要找的,但可能有用)

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

所以你可以实例化你的类:

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

关于c++ - 在 Ctor 调用中将 std::initializer_list 与括号括起来的参数分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33924536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com