从C ++中的任意类继承?

qsf*_*fzy 1 c++

是否可以设计一个将从一组基类中的任何一个继承的类?我希望能够编写如下内容:

class Derived : public ArbitraryBase {
    public:
        Derived () : ArbitraryBase () {}

    ...
};
Run Code Online (Sandbox Code Playgroud)

哪里ArbitraryBase可以在编译时确定一些基类。我有一组基类,我想从中派生相同的类。有没有一种方法可以避免为每个基类编写一个单独的派生类?

lve*_*lla 9

如果在编译时确实确定了它,则可以使派生类成为模板:

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)

???获取派生类型的一些编译时方式在哪里。


Nat*_*ica 5

您可以通过模板执行此操作。使用

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)

现在dDerived从继承的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)