我正在编写一个矩阵类,我希望能够将固定大小的矩阵转换为固定大小的双数组。虽然,我在实施适当的演员操作时遇到了麻烦。到目前为止我实施的内容不起作用:
template<unsigned int M, unsigned int N>
class Matrix
{
typedef double (&ArrayType)[M][N];
public:
operator ArrayType();
}
Matrix<3,3> mat1;
double matArr[3][3];
matArr = mat1;
错误:'sfz :: Matrix&lt; 3u,3u&gt;'赋值的不兼容类型 'double [3] [3]'
明确地投射矩阵会导致另一个错误:
错误:ISO C ++禁止转换为数组类型'double [3] [3]'
有没有办法实现我想要实现的语法?
答案 0 :(得分:6)
您无法分配数组。和它一起生活。
要使您的功能正常工作,您可以制作参考:
double (&ar)[3][3] = mat1;
或者,您可以将包装类似std::array<std::array<double, M>, N>
之类的并按值返回 。这就是为什么包含像std::array
这样的包装器的原因 - 它们允许您像处理值那样处理数组。从第一天开始就在C中使用了相同的技巧(将一个数组放在一个结构中),但它实际上在C ++中很好用和可读:
typedef typename std::array<std::array<T, M>, N> type;
operator type() const { return internal_array; }