C 在一个集体成员阵列中存储任意数量的不同类



假设我有一个类似的类模板(您不能更改网格,它代表了一个更困难的对象,我不喜欢更改):

template<int x, int y>
class grid{
public:
double S[x][y];
grid();
~grid();};

现在,我希望一个新的类模板(命名为Multi_grid),该模板拥有Array my_grids。我喜欢将其存储到my_grids不同的网格中,例如(伪代码):

my_grids[0]=grid<x*1,y*1>,
my_grids[1]=grid<x*2,y*2>
my_grids[n]=grid<(x<<n),(y<<n)>

我的想法是将void*用于my_grids并通过构造函数进行设置。我的麻烦始于构造函数:

template<int x, int y, int degree>
class multi_grid{
public:
void* my_grids[degree];
~multi_grid(){};
multi_grid(){
    create_grid<degree-1>();
    }
template<int grid_number>
void create_grid(void){
    my_grid[grid_number]=new grid<(x<<grid_number), (y<<grid_number)>;
    create_grid<grid_number-1>();
    }
};
template<int x, int y, int degree>
template<int grid_number>
void multi_grid<x, y, degree>::create_grid<-1>(){}

我有2个问题:

  1. 这个想法的概念是可能的吗?
  2. 如果第一个答案是正确的,该怎么做?我从一个简单的FOR_LOOP开始,这会导致麻烦,因为I 不是静态的。因此,我尝试了模板递归,而不是遇到不同的问题,例如:"阴影模板parm"或"功能模板部分专业化'create_grid&lt; -1>'不允许",还有更多麻烦。

我尝试了整体解决它,但无法弄清楚。预先感谢。

大小是您类型的一部分。通过诉诸void *,您可以在一定程度上进行核心。

另一种选择是仅使用向量。这仍然使您可以在容器中具有不同尺寸的网格并获取或设置数据。

#include <vector>
class grid
{
public:
    grid(int x, int y)
    {
        data.resize(x);
        //and each y
    }
//private: //maybe - up to you
    std::vector<std::vector<double>>data;
};
int main()
{
    std::vector<grid> my_grids;
    my_grids.emplace_back(1, 3);
}

最新更新