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

Seb*_*ann 0 c++ arrays casting operator-overloading

我正在写一个矩阵类,我希望能够将固定大小的矩阵转换为固定大小的双数组.虽然,我在实施适当的演员操作时遇到了麻烦.到目前为止我实施的内容不起作用:

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;
Run Code Online (Sandbox Code Playgroud)

错误:'sfz :: Matrix <3u,3u>'到'double [3] [3]'的赋值不兼容

明确地转换矩阵会导致另一个错误:

错误:ISO C++禁止转换为数组类型'double [3] [3]'

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

Ker*_* SB 6

您无法分配数组.和它一起生活.

为了使您的功能有效,您可以参考:

double (&ar)[3][3] = mat1;
Run Code Online (Sandbox Code Playgroud)

或者,你可以你的裸体阵列中的类似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; }
Run Code Online (Sandbox Code Playgroud)