C ++字段持有具有不同模板参数的对象

时间:2015-04-26 09:43:25

标签: c++ templates

我有以下设置:

// N is the number of rooms
template <size_t N>
class House {
    void printNumberOfRooms();
}


House<1> house1;
House<2> house2;

现在我希望有一个可以容纳house1和house2的字段,我可以在其中调用house.printNumberOfRooms()。

House house;
house.printNumberOfRooms();

给我一​​个&#34;需要模板参数&#34;错误(显然)。

实现目标的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

House<1>House<2>是完全不同且不兼容的类型,因此您无法将它们存储在单个字段中。

但是,您可以做的是为它们提供相同的父类,并将它们存储为指向该父类的指针,并使printNumberOfRooms为虚拟。像这样:

class BaseHouse{
virtual void printNumberOfRooms();
};
template<size_t N>
class House: public BaseHouse{
virtual void printNumberOfRooms();
};
class C{
BaseHouse * house;
};