Я пытаюсь определить интерфейсы для библиотеки, которая будет использовать 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;
}
Библиотека интерфейса будет реализовывать функции интерфейса, а приложение будет реализовывать функции уведомления в производном классе.,Есть ли хороший пример библиотеки, которая следует этому шаблону?