我想要一个尺寸不可知的模板(对于3d和4d都有用),大多数操作将在去除第一维的子矩阵上执行。
所以这就是我想要的
template <typename element, int dimensions>
class MMapMatrixTemplate{
public:
typedef boost::multi_array_ref<element, dimensions> array_type;
typedef std::array<size_t, dimensions> index_type;
typedef array_type::array_view<dimensions-1>::type stride_type;
};
其中array_type
,由此类管理的defineindex_type
数组定义用于索引数组的类型,我想`stride_type
定义此数组的一个维数较少的切片。
现在我得到一个错误:
include/MMapMatrix.hh:31:55: error: non-template ‘array_view’ used as template
typedef boost::multi_array_ref<element, dimensions>::array_view<dimensions-1>::type stride_type;
^
从有关视图的文档中,您可以看到视图类型的定义为:
typedef typename Array::template array_view<3>::type view1_t;
因此,这使您的代码可以编译:
#include "boost/multi_array.hpp"
template <typename element, int dimensions>
class MMapMatrixTemplate{
public:
typedef boost::multi_array_ref<element, dimensions> array_type;
typedef std::array<size_t, dimensions> index_type;
//typedef array_type::array_view<dimensions-1>::type stride_type;
typedef typename array_type::template array_view<dimensions-1>::type stride_type;
};
int main(int argc, const char *argv[])
{
typedef MMapMatrixTemplate<double, 4> matrix;
return 0;
}
您需要指定array_view
实际上是类模板,以便按原样使用它。否则,编译器期望它是完全定义的类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句