我正在尝试为将使用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;
}
接口库将实现接口函数,应用程序将在派生类中实现通知函数。 是否有一个遵循这种模式的库的好例子?
答案 0 :(得分:3)
我认为这不是一个好主意。
答案 1 :(得分:1)
您不需要在struct A中声明AImpl类。
我通常会做前瞻声明:
//Forward Declaraion.
class AImpl;
struct A {
public:
void func1();
void func2();
virtual void notif1();
virtual void notif2();
private:
AImpl *impl;
}