1

我正在尝试构建一个将多维数组写入文件系统的函数。为了保持紧凑,我只想为不同大小的 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或有其他方法可以做到这一点?

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 回答