C++:将对象强制转换为数组

C++: Cast object to array

本文关键字:转换 数组 对象 C++      更新时间:2023-10-16

我正在编写一个矩阵类,我希望能够将固定大小的矩阵强制转换为固定大小的双数组。尽管如此,我在实现适当的强制转换运算符时遇到了问题。到目前为止,我所实现的不起作用:

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<的赋值中存在不兼容的类型;3u,3u>'到'double[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; }