考虑以下代码:
/*
* myclass.h
*/
class myclass_impl
{
// ...
}
boost::shared_ptr<myclass_impl> myclass;
我可以以某种方式使
myclass_impl
(或者至少直接使用它)对于定义它的翻译单元是私有(private)的,从而允许客户端仅使用myclass
typedef吗?我试图实现的是让编译器在有人直接使用实现类的情况下提醒我。 最佳答案
在源文件(而不是头文件)中声明您的类(class),其他翻译单位将无法访问该类(class)。然后,使用前向声明在头文件中声明一个指针/引用。
或定义一个impl头文件并注释它不应包含在其他源文件中。
/*
* myclass.h
*/
class myclass_impl;
class myclass
{
boost::shared_ptr<myclass_impl> myclass_i;
public:
myclass() : myclass_i(new myclass_impl) { }
int getI() const;
};
/*
* myclass.cpp
*/
class myclass_impl
{
int i;
public:
myclass_impl() : i(4) { }
int getI() const { return i; }
};
int myclass::getI() const
{
return myclass_i->getI();
}