是否可以设计一个将从一组基类中的任何一个继承的类?我希望能够编写如下内容:
class Derived : public ArbitraryBase {
public:
Derived () : ArbitraryBase () {}
...
};
Run Code Online (Sandbox Code Playgroud)
哪里ArbitraryBase可以在编译时确定一些基类。我有一组基类,我想从中派生相同的类。有没有一种方法可以避免为每个基类编写一个单独的派生类?
如果在编译时确实确定了它,则可以使派生类成为模板:
template<class T>
class Derived : public T {
public:
Derived() {}
...
};
Run Code Online (Sandbox Code Playgroud)
您可以稍后通过提供基本类型来创建实例化此类:
int main() {
Derived< ??? > my_object;
...
}
Run Code Online (Sandbox Code Playgroud)
???获取派生类型的一些编译时方式在哪里。
您可以通过模板执行此操作。使用
template<typename T>
class Derived : public T
{
public:
Derived() : T() {}
// or just use if actually need to provide a default constructor
Derived() = default;
};
Run Code Online (Sandbox Code Playgroud)
为您提供了一个继承自T并调用T的默认构造函数的类。您将使用它来创建一个具体的类
Derived<Base1> d;
Run Code Online (Sandbox Code Playgroud)
现在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;
};
Run Code Online (Sandbox Code Playgroud)
它会像
Derived<Base1, Base2, ..., BaseN> d;
Run Code Online (Sandbox Code Playgroud)