プロジェクトでは、次の問題があります。
私は非常に単純な継承スキームを持っています(構成ではなく継承が必要です):
クラスベース
-> クラス DerivedA
-> クラス DerivedB
-> クラス DerivedC
A、B、C は Base から派生し、それだけです。だから今私は2つの選択肢があります:
仮想性を伴う公開継承
仮想性のない私的継承
いくつかの最適化の理由から (大量のインライン化が必要です)、仮想性は必要ありません...そしてプライベート継承も必要ありません。残っている唯一のオプションはCRTPだと思います。しかし、基本クラスには約 300 の関数があり、そこに CRTP を実装するのは本当に面倒です。
したがって、次の解決策が有効かどうか疑問に思います: 基本クラスのデストラクタでのみ CRTP を使用します。
template<class TCRTP> class Base
{
~Base() {delete static_cast<TCRTP*>(this);}
}
ここで、TCRTP は DerivedA、B、または C になり、公開継承を行います。それは完全に大丈夫ですか、それとも問題がありますか?
どうもありがとうございました。