我有一个模板类,它进行一些计算并返回 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 ...
生成这种类型的想法是由 Boost 手册中所说的
MultiArray 是递归定义的;容器层次模型 MultiArray 的每个级别的容器也是如此。实际上,中间
multi_array
级别的“元素”是 typesubarray
。
可以使用subarray
生成multi_array
具有有效维度的类型N+M
吗?也许以某种方式沿着以下几行:
typedef typename boost::multi_array<double, 3>::subarray<1>::type value_type;
boost::multi_array<value_type, 2> a;
我正在寻找一个相对干净的解决方案(不是冗长的 hack),如果 multi_array 接口无法做到这一点,我会更好地重新考虑我将要实现的设计。