2012-03-21 186 views
0

我正在寫一個矩陣類,我希望能夠將固定大小的矩陣轉換爲固定大小的雙數組。雖然,我有麻煩執行適當的演員操作。我到目前爲止已經實現不起作用:C++:將對象投射到數組

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; 

error: incompatible types in assignment of ‘sfz::Matrix<3u, 3u>’ to ‘double [3][3]’

鑄造矩陣明確導致另一個錯誤:

error: ISO C++ forbids casting to an array type ‘double [3][3]’

有沒有辦法來實現我想要實現的語法?

回答

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

請告訴我雙(AR)之間的差[3] [3]和雙AR [3] [3]? – Paranaix 2012-03-21 07:49:30

+0

@Paranaix:第一個是參考,第二個不是。 – 2012-03-21 07:50:39