是否有嵌套枚举类的接口机制?

时间:2013-03-01 13:16:06

标签: c++ oop class inheritance

在C ++中,纯虚函数提供了接口的功能。也就是说,任何子类必须实现基类中的所有纯虚函数:

class myClass {
    virtual bool implementme() = 0; // MUST be implemented
};

class mySubClass : public myClass {
    bool implementme() {} // REQUIRED
};

嵌套(enumclass是否有类似的机制?也就是说,我正在寻找像

这样的东西
class myClass {
    virtual enum class myEnum = 0; // MUST be implemented
};

class mySubClass : public myClass {
    enum class myEnum {}; // REQUIRED
};

2 个答案:

答案 0 :(得分:1)

由于您说实现者不是您的代码库的一部分(因此不会产生编译错误),我必须假设您正在编写库,并且使用此枚举的代码位于库的使用者中。

我建议您使用CRTP,如下所示:

class myClass {
};

template<typename T> class myClassImpl : public myClass {
  static_assert(std::is_enum<typename T::myEnum>::value, "Subclasses of myClassImpl must provide the myEnum enum class");
};

class mySubClass : public myClassImpl<mySubClass> {
    enum class myEnum {};
};

答案 1 :(得分:0)

这不会有多大意义。有人只能看到基类(而不是派生类),并从某些虚函数的返回中返回myEnum,其中myEnum是不完整的类型。任何类型的虚拟类型都没有机制,包括枚举。你真的想要一个虚拟的桌子来查找你的类型吗?