2017-01-10 7 views
1

多次元配列をファイルシステムに書き込む関数を作成しようとしています。それをコンパクトに保つ​​ために、私はちょうど異なるサイズのmulti_arraysのための1つの関数を作成したいと思います。異なるサイズのboost :: multi_arraysを使用して関数を呼び出すことはできますか?

typedef boost::multi_array<int, 2> Array2D; 
typedef boost::multi_array<int, 3> Array3D; 
typedef boost::multi_array<int, 4> Array4D; 
typedef boost::multi_array<int, 5> Array5D; 

void writeArrayToFile(boost::multi_array_base_type array){ 
    // do things with array 
} 

void main(){ 
    Array2D myArray2D; // + fill array 
    writeArrayToFile(myArray2D); 

    Array3D myArray3D; // + fill array 
    writeArrayToFile(myArray3D); 
    //... and so on 
} 

boost::multi_array_base_typeのようなものがありますか、これを達成する他の方法があるのですか?

答えて

0

テンプレートはC++のあなたの友人です。テンプレートの問題を解決します。それらを愛することを学びなさい:

template<std::size_t N> 
void writeArrayToFile(const boost::multi_array<int, N>& array) { 
    // do things with array 
} 

あなたはそのようなあなたの関数を呼び出すと、コンパイラがサイズを推測させることができます:

writeArrayToFile(myArray2D); 
writeArrayToFile(myArray3D); 

あなたが好きなら、あなたも要素の型を推論することができます

template<typename T, std::size_t N> 
void writeArrayToFile(const boost::multi_array<T, N>& array) { 
    // do things with array 
} 
+0

ありがとうございます!それは素晴らしい解決策です。 – coJetty

+0

@coJettyはそれからupvotingを検討し、おそらくあなたのニーズに合った答えを受け入れます。 –

関連する問題