kra*_*lyk 11 c++ oop design-patterns
假设我有这样的类(简化):
class Foo_p;
class Foo
{
private:
Foo_p *p;
public:
Foo();
/* methods, etc... */
};
Run Code Online (Sandbox Code Playgroud)
该类是API的一部分.Foo_p是类的所有私有部分,它们不像往常一样在类Foo本身中声明,而是在一个单独的前向声明的类中,该类仅由外部不可见的底层实现使用.
我看过这个模式在几个项目中使用过,有没有名字呢?
另外,如何正确使用它(例如异常安全等)?实际实施应该在哪里?在Foo类中,像往常一样,只使用Foo_p存储数据,或者在Foo_p类中使用Foo只是一个包装器?
这是众所周知的PIMPL.私有/指向私有实现.类,Foo_p
您的类会一直为私人实施,并通过指针访问它,因此而不是显示真实类客户,他们只能看到您选择公开的公共接口.它本质上抽象从报头的实现细节的痕迹存在于远离protected
和private
成员.
我发现它在VC++中不实用 - 它破坏了代码完成.如果你很确定你的执行和不希望它是有用的private
和protected
成员的标题显示.
我把类的实际实现Foo_p
放在了cpp文件中Foo
,虽然这可能是代码完成破坏的原因,但至少我不必冒着通过包含它的头来重用类的风险.
这就是pimpl的习语
看到