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