我遇到了一个将 pimpl 类作为 header 的实现,并将其包含在 pimpl 实现中。它甚至有意义吗?像这样:
用户界面.h
class UI {
public:
UI();
virtual ~UI();
// bunch of methods
private:
UIImpl* m_impl;
}
UIImpl.h
class UIImpl
{
public:
UIImpl( ...) ;
......
}
UIImpl.cpp
#include "UIImpl.h"
UIImpl::UIImpl()
{
//Actual Implementation
...
}
我在想 PIMPL
的原因是将实现完全隐藏在 cpp
文件中。使用 header 是否会破坏目的?
最佳答案
它们是不同类型的 header 。 UI.h
是“公共(public)的”——它是库外部接口(interface)的一部分,供其客户端使用。
UIImpl.h
是“私有(private)的”,就像 UIImpl.cpp
一样。只要它从未包含在公共(public) header 中,它就可以保持对客户端不可见,就像 .cpp
本身一样。
将 impl
类定义拆分到头文件中可能有多种原因。或许还有一些其他的实现类被传递了UIImpl&
参数。也许只在标题上运行 doxygen 更容易。也许这只是项目政策。
底线是,它仍然是 Pimpl,只要您不发布私有(private) header 。
关于c++ - Pimpl 带有包含类的 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18573944/