ダウンキャストがCRTPで有効であることをコンパイルタイムチェックを実装する方法は?

StackOverflow https://stackoverflow.com/questions/5907731

質問

私は平易な古いCRPTを持っています(アクセス制限に気を取られないでください - 問題はそれらについてではありません):

 template<class Derived>
 class Base {
     void MethodToOverride()
     {
        // generic stuff here
     }
     void ProblematicMethod()
     {
         static_cast<Derived*>(this)->MethodToOverride();
     } 
 };

それはいつものようにこのように使用することを意図しています:

 class ConcreteDerived : public Base<ConcreteDerived> {
     void MethodToOverride()
     {
        //custom stuff here, then maybe
        Base::MethodToOverride();
     }
 };

static_cast 私を悩まします。ダウンキャストが必要なので、明示的なキャストを使用する必要があります。すべての合理的なケースでは、現在のオブジェクトは実際に派生クラスのものであるため、キャストは有効です。

しかし、どういうわけか階層を変更し、キャストが無効になるとしたらどうでしょうか?

この場合、明示的なダウンキャストが有効であることをコンパイル時間チェックをどうにかして実施できますか?

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top