从静态帮助函数

时间:2018-03-28 08:55:27

标签: c++ c++11

我正在寻找一种方法来实现需要访问嵌套私有类的好友/私有函数。我想避免在头文件中声明它,以抽象实现细节并避免膨胀标头。不应在源文件之外调用这些函数。

理想情况下,它将是一个静态函数,但不知何故可以访问私有类/成员。

我读过一个无名的命名空间至少可以帮助我解决后一个问题,这是正确的吗?

谢谢。

1 个答案:

答案 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 */ }
};