我有一个模板类,做一些计算和返回的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的接口,我会更好地重新思考什么我设计即将实施。