是否存在用于嵌套枚举类的接口机制

Is there an interface mechanism for nested enum classes?

本文关键字:接口 机制 枚举 存在 用于 嵌套 是否      更新时间:2023-10-16

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

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

嵌套的(enum) class是否有类似的机制?也就是说,我要找像

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

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

我建议您这样使用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 {};
};

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