我有一個模板類,做一些計算和返回的multi_array,有點簡單化這樣的:嵌套boost :: multi_array?
template <typename T>
class C
{
public:
typedef boost::multi_array<T, 2> result_type;
void do_something(T const& data, unsigned i, unsigned j); // add result to R[i][j]
result_type R;
};
實例化類的簡單型T=double
工作正常。現在,我想用「T=boost::multi_array<double, 1>
」實例化,但結果類型爲boost::multi_array<double, 3>
。
定義multi_array<multi_array<T, N>, M>>
並清楚地不會導致multi_array<T, N+M>
,它僅僅是一個N維的multi_array用爲M維multi_arrays元件...
想法產生這種類型由升壓手動說法動機
MultiArray是遞歸定義的;容器層次模型MultiArray也在每個級別的容器中。 事實上,事實證明,中級
multi_array
級別的「元素」類型爲subarray
。
可以使用subarray
生成一個multi_array
類型有一個有效的維度N+M
?也許大意如下莫名其妙:
typedef typename boost::multi_array<double, 3>::subarray<1>::type value_type;
boost::multi_array<value_type, 2> a;
我在尋找一個相對乾淨的解決方案(而不是冗長的黑客),如果這是不可能的multi_array的接口,我會更好地重新思考什麼我設計即將實施。