是否可以设计一个将从一组基类中的任何一个继承的类?我希望能够编写如下内容:
class Derived : public ArbitraryBase {
public:
Derived () : ArbitraryBase () {}
...
};
其中ArbitraryBase
可以是在编译时确定的一些基类。我有一组基类,我想从中派生相同的类。有没有一种方法可以避免为每个基类编写一个单独的派生类?
答案 0 :(得分:9)
如果是在编译时真正确定的,则可以将派生类作为模板:
template<class T>
class Derived : public T {
public:
Derived() {}
...
};
您可以稍后通过提供基本类型来创建实例化此类:
int main() {
Derived< ??? > my_object;
...
}
???
是获取派生类型的一些编译时方式。
答案 1 :(得分:5)
您可以通过模板执行此操作。使用
template<typename T>
class Derived : public T
{
public:
Derived() : T() {}
// or just use if actually need to provide a default constructor
Derived() = default;
};
为您提供一个从T
继承并调用T
的默认构造函数的类。您将使用它来创建一个具体的类
Derived<Base1> d;
现在d
是从Derived
继承的Base1
。
如果您需要继承任意数量的碱基,则可以使用可变参数模板,例如
template<typename... Bases>
class Derived : public Bases...
{
public:
Dervied() : Bases()... {}
// or just use if actually need to provide a default constructor
Derived() = default;
};
它会像
那样使用Derived<Base1, Base2, ..., BaseN> d;