我正在寻找一种方法来实现需要访问嵌套私有类的好友/私有函数。我想避免在头文件中声明它,以抽象实现细节并避免膨胀标头。不应在源文件之外调用这些函数。
理想情况下,它将是一个静态函数,但不知何故可以访问私有类/成员。
我读过一个无名的命名空间至少可以帮助我解决后一个问题,这是正确的吗?
谢谢。
答案 0 :(得分:4)
您正在寻找Herb Sutter在Guru of the week #100和#101中定义的PImpl习语。
我们的想法是定义一个公共接口包含一个私有接口的不透明句柄:
// PUBLIC INTERFACE
struct API
{
void some_function();
private:
struct Impl; // not necessarily a nested type
Impl* pImpl;
};
实施如下
#include <private_interface.h>
void API::some_function() { pImpl->some_function(); }
私有界面
// PRIVATE INTERFACE
struct API::Impl
{
void some_function() { /* actual code */ }
};