2

次のように、テンプレートから継承するライブラリLibraryClass<BaseClass>でクラスを使用しています。LibraryClass<>

template<class BaseClass>
class LibraryClass
:
    public BaseClass
{
...

このクラスは私が望んでいることを正確に実行しますが、コンストラクターにバグがあります。次のような派生クラスを作成しようとしています。

template<class BaseClass>
class MyClass
:
    public LibraryClass<BaseClass>
{
...

そして、新しいコンストラクターを追加するだけです。ただし、コンストラクター MyClass() では、直接の親ではないコンストラクター BaseClass() を呼び出す必要があります。上記のように、LibraryClass() にはバグがあるため、呼び出したくありません。

新しいコンストラクタだけでこの新しいクラスを作成するにはどうすればよいですか?

4

1 に答える 1

3

一般的なケースで親コンストラクターをバイパスする標準準拠の方法があるとは思えません (そのようなものが存在する場合、親サブオブジェクトが使用可能な状態のままであることを保証するものは何ですか?)

IMO バグを修正する最善の方法は、変更することLibraryClassです。

それができない場合はLibraryClass、コピーのバグをコピーして修正できます。これには、明らかな潜在的に非常に重大な欠点があります。

もう 1 つの考えられる代替方法は、バグのあるコンストラクターを呼び出してから、オブジェクトを修正しMyClass::MyClassてバグを回避することです。このアプローチは、あなたのケースではうまくいかないかもしれません。

于 2013-11-13T11:51:04.593 に答える