pimpl-idiom を使用するライブラリのインターフェイスを定義しようとしています。以下は、私が定義する典型的なインターフェイス クラスです。
struct A {
public:
void func1();
void func2();
virtual void notif1();
virtual void notif2();
private:
class AImpl;
AImpl *impl;
}
関数 func1()、func2() はインターフェース関数です。そして、notif1()、notif2() は、アプリケーションが (A のサブクラスで) 実装する必要がある通知関数です。
これは、ライブラリのインターフェイスを定義する正しい方法ですか? この方法に欠点はありますか、それともより良い解決策はありますか?
すべての答えをありがとう。したがって、私が収集したすべての回答から、ライブラリのインターフェイスを表すには、次の方法が適していることがわかります。
// Forward declaration
class AImpl;
struct A {
public:
void func1();
void func2();
private:
virtual void notif1();
virtual void notif2();
AImpl *impl;
}
インターフェイス ライブラリはインターフェイス関数を実装し、アプリケーションは派生クラスで通知関数を実装します。このパターンに従うライブラリの良い例はありますか?