防止图书馆内部资料在.h中可见

PEA*_*EAR 2 c++ header libraries

首先要做的事情是:我知道我的问题很可能是基于一般的误解,但我希望我能向你表明我的观点.

我知道在将代码放入C++中的不同文件时,我们确实创建了一个.h(用于定义)和一个.cpp(用于实现).例如,在编写类库时,我必须在头文件中放置私有和公共成员的definitioj.但是,如果 - 出于某种原因 - 我想隐藏用户的私人信息该怎么办?

谢谢!

Arm*_*yan 5

你使用Pimpl成语.Pimpl代表"指向实现的指针".基本上,您不会在类中存储实现细节.相反,您存储一个指向实现的不透明指针:

class MyClass
{
public: 
    //public functions here
private:
    class Impl; //no definition, opaque
    Impl* pimpl;
};
Run Code Online (Sandbox Code Playgroud)

然后你继续在MyClass::Impl.cpp文件中定义你的类,因为只有函数定义需要它.

PIMPL习惯用法还有另外一个好处,即只要类的接口没有改变,对实现所做的任何更改都不需要重新编译类客户端.