あまり一般的ではない C++ のイディオムがありますが、これは私が過去に何度か使用してうまくいきました。それを説明するために一般的に使用されている名前があるかどうかを思い出せないようです。
mixins、CRTP、およびtype-erasureに多少関連していますが、特にこれらのいずれかではありません。
クラスに実装を追加したいが、それをクラスまたはその派生元のクラスに配置したくない場合に、問題が発生します。この理由の 1 つは、クラスが継承階層の一部であり、実装が 1 回だけ発生する可能性があるためです。
とりあえず、階層に具体的な非リーフ クラスを含める必要があるかどうか、場合によっては仮想継承がオプションになるかどうかなどの問題はさておき、次から派生するテンプレート クラスで実装を提供する 1 つのソリューションを知っています。そのテンプレート パラメータ。これにより、インスタンスを作成するときにテンプレートを使用できますが、そのオブジェクトのベースの 1 つへのポインターまたは参照によってのみオブジェクトを使用できます (大まかな意味での型消去の出番です)。
例として、侵入的な参照カウントがある場合があります。すべてのクラスは ref カウント インターフェイスから派生しますが、ref カウント自体と ref カウント メソッドの実装を 1 回だけ表示する必要があるため、それらを派生テンプレートに入れます。それを呼び出しましょうImplementsRC<T>
。これで、次のようにインスタンスを作成できます。
ConcreteClass* concrete = new ImplementsRC<ConcreteClass>();
複数のテンプレート化されたオーバーロードなどで形成されたコンストラクターの転送などについて詳しく説明しています。
それで、イディオムが何であるかを明確にしたことを願っています。私の質問に戻ります - このイディオムに受け入れられている、または少なくとも一般的に使用されている名前はありますか?