C++ では、基本クラスと派生クラスに単一のインターフェイスを実装させることは可能ですか?
例えば:
class Interface
{
public:
virtual void BaseFunction() = 0;
virtual void DerivedFunction() = 0;
};
class Base
{
public:
virtual void BaseFunction(){}
};
class Derived : public Base, public Interface
{
public:
void DerivedFunction(){}
};
void main()
{
Derived derived;
}
Derived はインスタンス化できないため、これは失敗します。コンパイラに関する限り、Interface::BaseFunction は定義されていません。
これまでのところ、私が見つけた唯一の解決策は、Derived でパススルー関数を宣言することです
class Derived : public Base, public Interface
{
public:
void DerivedFunction(){}
void BaseFunction(){ Base::BaseFunction(); }
};
より良い解決策はありますか?
編集:問題がある場合は、MFC ダイアログを使用して実際に発生した問題を次に示します。
CDialog から派生したダイアログ クラス (MyDialog と言います) があります。依存関係の問題により、抽象インターフェイス (MyDialogInterface) を作成する必要があります。MyDialogInterface を使用するクラスは、MyDialog に固有のメソッドを使用する必要がありますが、CDialog::SetParent を呼び出す必要もあります。MyDialog::SetParent を作成して CDialog::SetParent に渡すことで解決しましたが、もっと良い方法があるかどうか疑問に思っていました。