1

多次元配列をファイル システムに書き込む関数を構築しようとしています。コンパクトに保つ​​ために、異なるサイズの multi_arrays に対して 1 つの関数を作成したいと思います。

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これを達成するためのようなものはありますか、それとも他の方法はありますか?

4

1 に答える 1

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
}
于 2017-01-10T03:04:08.413 に答える