ダウンキャストがCRTPで有効であることをコンパイルタイムチェックを実装する方法は?
-
29-10-2019 - |
質問
私は平易な古い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
私を悩まします。ダウンキャストが必要なので、明示的なキャストを使用する必要があります。すべての合理的なケースでは、現在のオブジェクトは実際に派生クラスのものであるため、キャストは有効です。
しかし、どういうわけか階層を変更し、キャストが無効になるとしたらどうでしょうか?
この場合、明示的なダウンキャストが有効であることをコンパイル時間チェックをどうにかして実施できますか?
正しい解決策はありません
所属していません StackOverflow