我可以转换对象并访问C++中的私有数据成员吗?

7 c++ private member

我想访问类中的私有数据成员.类中没有成员函数来访问私有数据成员.这是私人的.

我想上课,还有一些如何打开它.一种方法是复制类的声明,使私有成员公开并调用新类class something_else.然后我重新解释演员并复制原始对象.这有效.但是我想要更优雅的东西......或者也许是通用的...或者只是另一种方式.

有什么选择?我可以使用void*吗?我可以将课程记入另一个空班吗?有什么方法可以做到这一点?

%

Ale*_*x B 18

我在假设

  1. 你已经经历过"打破封装是坏事"的阶段,
  2. 用尽其他可能的解决方案,
  3. 无法更改类的标题.

有几种方法可以破坏对类私有成员的访问,如GotW#76所示.

  1. 复制类定义并添加friend声明.
  2. 使用邪恶的宏:#define private public 在包含类'标题之前.
  3. 编写具有相同二进制布局的类定义,并用于reinterpret_cast从原始类切换到伪类.
  4. 如果有模板成员函数(唯一的可移植解决方案),请专门化它.