Max*_*xpm 2 c++ scope include c-preprocessor
假设我有一个带有使用类的头文件std::string.
#include <string>
class Foo
{
std::string Bar;
public:
// ...
}
Run Code Online (Sandbox Code Playgroud)
此头文件的用户可能不希望std::string包含在他/她的项目中.那么,如何将包含限制为头文件呢?
Oli*_*rth 11
你的类的用户必须包含<string>,否则他们的编译器将不知道Foo对象有多大(如果Foo构造函数/析构函数是内联定义的,那么编译器也不会知道为string成员调用什么构造函数/析构函数).
这确实是C++编译模型的一个令人恼火的副作用(基本上是从C完整地继承).如果你想完全避免这种事情,你可能想看看PIMPL习语.