【发布时间】:2011-05-19 22:35:50
【问题描述】:
我正在尝试为将使用 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++”系列丛书中多次详细介绍了这一点。
标签: c++ pimpl-idiom