一个班级可以私有翻译单位吗?

Dan*_*tor 6 c++ typedef private

请考虑以下代码:

/*
 * myclass.h
 */

class myclass_impl
{
    // ...
}

boost::shared_ptr<myclass_impl> myclass;
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式使myclass_impl(或至少直接使用它)对其定义的翻译单元是私有的,允许客户只使用myclasstypedef吗?我想要实现的是如果有人直接使用实现类,编译器会提醒我.

ste*_*anv 3

在源文件(而不是头文件)中声明您的类,其他翻译单元将无法访问该类。然后,使用前向声明在头文件中声明指针/引用。

或者定义一个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(); 
}
Run Code Online (Sandbox Code Playgroud)