gpt4 book ai didi

c++ - 如何在模板类中为 `` boost::array_view`` 创建 typedef

转载 作者:太空狗 更新时间:2023-10-29 20:04:08 25 4
gpt4 key购买 nike

我想要一个与维度无关的模板(对 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 定义了由此类管理的数组 index_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;
^

最佳答案

来自documentation在 View 上,您​​可以看到 View 类型的定义为:

  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 实际上是一个类模板 以便按原样使用它。否则,编译器期望它是完全定义的类型。

关于c++ - 如何在模板类中为 `` boost::array_view`` 创建 typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22064962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com