您可以使用不同大小的 boost::multi_arrays 调用函数吗?
Can you call a function using different sized boost::multi_arrays?
我正在尝试构建一个函数来将多维数组写入文件系统。为了保持紧凑,我只想为不同大小的 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
之类的东西,或者是否有其他方法可以做到这一点?
模板是你在 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
}
我正在尝试构建一个函数来将多维数组写入文件系统。为了保持紧凑,我只想为不同大小的 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
之类的东西,或者是否有其他方法可以做到这一点?
模板是你在 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
}