【发布时间】:2013-12-13 12:56:47
【问题描述】:
我正在创建一个 gridcell 类,它基本上是一个多单元格数组。我希望这个网格单元有任意数量的维度。这意味着在 boost::multiarray 变量的声明中,我不能指定模板的第二个参数。具体来说,我的代码如下所示:
#include "cell.h"
#include <iostream>
#include <vector>
#include <boost/multi_array.hpp>
class GridCell {
public:
GridCell(); // Default constructor not used.
GridCell(const std::vector<int> dims, const float leafsize);
virtual ~GridCell();
friend std::ostream& operator << (std::ostream & os, const GridCell & c);
private:
std::vector<int> dims_; // Vector containing the size of each dimension.
float leafsize_; // It is assumed that the cells in the grid are cubic.
boost::multi_array<Cell,ndims> * grid;
};
具体来说, boost::multi_array * grid;我希望它在 Gridcell 类构造函数中指定的维数。
有什么建议或替代方法吗?
非常感谢!
【问题讨论】:
-
boost::multi_array无法做到这一点。我将此标记为副本的问题的答案具有动态尺寸的示例代码。 -
您对可能的替代方案有什么建议吗?我想到了两种可能的解决方案: - 在类中没有 boost 多数组,只是通过引用类的方法来传递它, - 定义最大维度。假设 boost::multi_array
| * grid 正如我在 boost 文档中看到的那样,可以只用一个 int 来定义一些维度,这意味着维度实际上是“平坦的”(boost.org/doc/libs/1_55_0/libs/multi_array/doc/reference.html 句子 A指定单索引时会出现退化维度...) | -
那太糟糕了。自己滚怎么样?一个原始的实现对我来说似乎并不难。
-
好吧,虽然我对 C++ 有一些经验,但我必须承认我不知道如何面对这种原始的实现。你能给我什么建议吗?谢谢!
-
这真的取决于功能集。如果您的所有尺寸都具有相同的尺寸,这将变得容易得多。
标签: c++ boost boost-multi-array