我不認爲你可以,因爲的multi_array
維度進行編碼類型的模板參數:
typedef boost::multi_array<double, 3> array_type;
是從根本上
不同
typedef boost::multi_array<double, 2> array_type;
「最佳」,你可以做的是有
static const int MAX_DIMENSIONS = 10;
typedef boost::multi_array<double, MAX_DIMENSIONS> array_type;
,然後生成範圍離開 「未使用」 維度的程度上1
:
Live On Coliru
#include <boost/multi_array.hpp>
#include <iostream>
static const int MAX_DIMENSIONS = 5;
typedef boost::multi_array<double, MAX_DIMENSIONS> array_type;
array_type make_array(int dims, int default_extent = 5) {
boost::array<int, MAX_DIMENSIONS> exts = {};
std::fill_n(exts.begin(), exts.size(), 1);
std::fill_n(exts.begin(), dims, default_extent);
return array_type(exts);
}
int main() {
auto a = make_array(3);
auto b = make_array(2);
std::copy(a.shape(), a.shape() + a.dimensionality, std::ostream_iterator<size_t>(std::cout << "\na: ", " "));
std::copy(b.shape(), b.shape() + b.dimensionality, std::ostream_iterator<size_t>(std::cout << "\nb: ", " "));
}
打印
a: 5 5 5 1 1
b: 5 5 1 1 1
'extents = extents [5];'?我不明白這應該是什麼 – user463035818
想要得到一個類似於「範圍[5] [5] [5] ..... [5]」的東西,請參閱d 5s – Scott
考慮添加/您想要的東西實現(不/如何/)這個問題。還要添加'array_type'的定義。 – sehe