C++ 在未指定维数的类中包含boost::multi_数组

C++ 在未指定维数的类中包含boost::multi_数组,c++,boost,boost-multi-array,C++,Boost,Boost Multi Array,我正在创建一个gridcell类,它基本上是一个多单元格数组。我希望这个网格单元有任意数量的维度。这意味着在boost::multiarray变量的声明中,我不能指定模板的第二个参数。具体而言,我的代码如下所示: #include "cell.h" #include <iostream> #include <vector> #include <boost/multi_array.hpp> class GridCell { public: GridC

我正在创建一个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类构造函数中指定的维度数

有什么建议或选择吗


多谢各位

为了结束这个问题,我添加了以下答案:

最后,我通过创建一个基于数组的自制容器解决了这个问题。最初它是基于向量的,但我更喜欢通过确定维度的数量和最大大小来使用数组。在这种情况下,我认为这种方法比使用boostmulti_数组更好,因为我的容器实际上是一个平面数组,元素索引通过数学运算得到推广


感谢您的回复。

使用boost::multi_阵列无法做到这一点。我将这个问题的答案标记为一个副本,其中包含动态维度的示例代码。您对可能的替代方案有何建议?我考虑了两种可能的解决方案:-在类中没有boost multiarray,只是通过引用类的方法传递它,-定义最大维度。让我们说boost::multi_array*grid,正如我在boost文档中看到的,可以用一个int来定义一些维度,这意味着维度实际上是平坦的,当指定一个索引时会出现退化维度……这太糟糕了。你自己滚怎么样?一个原始的实现对我来说似乎并不太难。尽管我有C++的一些经验,但我必须承认我不知道如何面对这样的原始实现。你能给我一些建议吗?非常感谢。这实际上取决于功能集。如果所有维度都具有相同的大小,这将变得容易得多。