我正在编写一个矩阵类,并且希望能够将固定大小的矩阵强制转换为固定大小的双精度数组。虽然,我在实现适当的强制转换运算符时遇到了麻烦。到目前为止,我已实现的功能无效:

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 分配给以下类型不兼容
  ‘双[3] [3]’


显式转换矩阵会导致另一个错误:


  错误:ISO C ++禁止转换为数组“ double [3] [3]”


有没有办法实现我想要实现的语法?

最佳答案

您永远无法分配数组。忍受它。

为了使您的功能正常工作,您可以参考一下:

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; }

07-24 14:05