c ++在一个class-member-array中存储任意数量的不同类

时间:2017-09-13 14:45:37

标签: c++ arrays templates storing-data class-members

我们说我有这样的课程模板(你不能改变网格,它代表一个更难的对象,我不想改变):

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

现在我希望有一个新的类模板(名为multi_grid),它拥有一个数组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)>

我的想法是对my_grids使用void *并通过构造函数设置它。我的麻烦从构造函数开始:

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>(){}

我有两个问题:

  1. 这个想法的概念是否可能?
  2. 如果第一个答案是真的,怎么办? 我从一个简单的for_loop开始,这导致了麻烦,因为i ++不是静态的。 所以我尝试了模板递归,而不是遇到不同的问题: &#34;阴影模板parm&#34;或&#34;功能模板部分特化'create_grid&lt; -1&gt;'不允许&#34;还有很多麻烦。
  3. 我尝试了整体来解决它并且无法弄明白。提前谢谢。

1 个答案:

答案 0 :(得分: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);
}