CRTP を使用してコンパイル時のポリモーフィズムを実装しようとしていますが、派生クラスに強制的に関数を実装させたいと考えています。
現在の実装はこのようなものです。
template <class Derived>
struct base {
void f() {
static_cast<Derived*>(this)->f();
}
};
struct derived : base<derived>
{
void f() {
...
}
};
この実装では、派生クラスが を実装していない場合、関数の呼び出しは無限ループに陥りますf()
。
派生クラスに強制的に純粋仮想関数のような関数を実装させるにはどうすればよいですか? 「static_assert」のように使用しようとしましstatic_assert(&base::f != &Derived::f, "...")
たが、異なるクラスのメンバー関数を指す 2 つのメンバー関数ポインターが比較できないというエラー メッセージが生成されます。