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

时间:2012-03-21 07:43:28

标签: 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;
  

错误:'sfz :: Matrix&lt; 3u,3u&gt;'赋值的不兼容类型   'double [3] [3]'

明确地投射矩阵会导致另一个错误:

  

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

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

1 个答案:

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