4

私はいくつかのクラスを持っています

class object {
public:
virtual std::string name() const; 
};

それはいくつかのインターフェースを提供し、メソッドをオーバーライドするためにすべての派生物が必要ですname。問題は、オーバーライドされていないことです。コンパイル時に何も壊れませんが、実行時に問題が発生します。メソッドのオーバーライドを強制する方法はありますか? 編集:直接の子孫だけでなく、すべての派生物でオーバーライドを強制したい!

4

2 に答える 2

8

はい、純粋な仮想にします。

constexpr virtual std::string name() = 0;
于 2012-08-15T10:03:03.107 に答える
6

メンバーへのポインター型を確認することで、メンバーが基本クラスで定義されているかどうかを確認できます。

static_assert(std::is_same<decltype(&U::name), std::string (U::*)()>::value,
              "name must be defined directly in U");

これは、コンパイル時に、関心のあるすべての子孫型にアクセスできる必要があることを意味します。

于 2012-08-15T10:41:22.453 に答える