2012-03-21 22 views
0

私は行列クラスを作成しています。固定サイズの行列を固定サイズの2倍配列にキャストできたいと考えています。しかし、私は適切なキャスト演算子を実装するのにトラブルがあります。私は、これまで実施してきた動作しません: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

+0

@パロアニクス:最初のものは参考資料であり、2番目のものは参考ではありません。 –

関連する問題