2

C++ では、純粋仮想関数はインターフェイスの機能を提供します。つまり、すべてのサブクラスは、基本クラスにすべての純粋仮想関数を実装する必要があります。

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

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

enumネストされた ( ) classesに同様のメカニズムはありますか? つまり、私は次のようなものを探しています

class myClass {
    virtual enum class myEnum = 0; // MUST be implemented
};

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

2 に答える 2

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 {};
};
于 2013-03-01T14:09:15.987 に答える
0

これではあまり意味がありません。誰かが (派生クラスではなく) 基本クラスのみを可視化しmyEnum、一部の仮想関数の戻り値から a を取得することができました。ここmyEnumで、 は不完全な型です。列挙型を含む、あらゆる種類の仮想型のメカニズムはありません。とにかく、あなたのタイプを検索する仮想テーブルが本当に必要ですか?

于 2013-03-01T13:21:46.597 に答える