gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:04:46 25 4
gpt4 key购买 nike

我想访问类中的私有(private)数据成员。类中没有访问私有(private)数据成员的成员函数。这是私有(private)的。

我想上课,想知道如何打开它。一种方法是复制类的声明,将私有(private)成员设为公有并将新类称为 something_else。然后我重新解释转换并复制原始对象。这行得通。但我想要更优雅的东西……或者可能是通用的……或者只是另一种方式。

有哪些选择?我可以使用 void* 吗?我可以将类(class) memcpy 到另一个空类(class)吗?有什么方法可以做到这一点?

%

最佳答案

我假设

  1. 您已经经历了“打破封装是不好的”阶段,
  2. 用尽其他可能的解决方案,
  3. 不能更改类的标题。

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

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

关于c++ - 我可以转换对象并访问 C++ 中的私有(private)数据成员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1513140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com