如何确保类只派生自预定义的派生类集?

时间:2018-03-29 22:53:16

标签: c++ class c++11 templates inheritance

我甚至不确定是否可以这样做。然而,这就是现在的情况。

我有一个基类:

class Base {
public:
    virtual void fun();
private:
    int variable;
}

考虑我有两个派生类:

class Derived1 : public Base {
public:
    virtual void fun() override;
    virtual void moreFun();
private:
    int variable;
}

class Derived2 : public Base {
public:
    virtual void fun() override;
    virtual void moreFun();
private:
    int variable;
}

我想写一个类 Derived3 ,可以从 Derived1 <派生EM> Derived2的 即可。

我们的想法是让 Derived3 在其他派生类之一上扩展某些功能。我不打算在运行时切换类,但想以类似于模板的方式进行初始化。

Template <class T>
class Derived3 : public T {
public:
    virtual void moreFun() override;
private:
    int variable;
}

是否可以确保Derived3类只能来自 Derived1 Derived2

1 个答案:

答案 0 :(得分:1)

std::is_base_ofstd::is_same可以满足您的需求。只需将其添加到类主体中,不要忘记包含文件:

Base

如果您只想允许特定的派生类而不是所有派生类,或者想要禁止undefined本身,请查看{{3}}。