【发布时间】:2020-05-23 15:45:54
【问题描述】:
我正在创建一个矩阵类,我希望用户能够像这样实例化矩阵:
Matrix<float, 2, 2> mat = { { 10, 20 }, { 30, 40 } };
我的 Matrix 类是这样定义的:
template<typename T, unsigned int ROWS, unsigned int COLS>
class Matrix
{
public:
Matrix(std::array<std::array<T, ROWS>, COLS> matrix)
{
// ...
}
// ...
};
但是,当我尝试实例化矩阵时,就像我在上面所做的那样,我从编译器收到“无法转换”错误。我不想使用初始值设定项列表,因为如果用户以错误的顺序定义矩阵,我希望触发编译时错误。有谁为什么这不起作用?如果是的话,还有其他选择吗?
【问题讨论】:
-
问题是
std::array使用聚合初始化(因此可能需要/需要额外的大括号),但是您使用复制/移动构造函数进行了模棱两可的调用:-/ -
谢谢@Jarod42,那有什么办法吗?
标签: c++ arrays matrix initializer-list