我正在嘗試爲將使用pimpl-idiom的庫定義接口。以下是我定義的典型接口類。使用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;
}
接口庫將實現接口函數,應用程序將在派生類中實現通知函數。 是否有任何遵循這種模式的圖書館的好例子?
與pimpls無關(即,與您的實際問題),但公共虛擬功能是一個壞主意。 Herb Sutter在他的「Exceptional C++」系列叢書中多次詳細介紹了這一點。 – ildjarn 2011-05-19 23:36:19