如果不得不访问一个对象的private/protect成员,有没有好的策略
protect好说,你继承一下,然后就可以在继承类里访问它了。class Protect {protected: int c;};class Access : public Protect {public: int GetC() const { return c; }};Protect* p = GetPointer();Access* a = static_cast\u0026lt;Access*\u0026gt;(p);int c = a-\u0026gt;GetC();
■网友
理论上可以计算出该成员相对对象的偏移地址,把对象memcpy到一个buffer里面,然后reinterpret_cast那个成员
■网友#include "debug_magic.hpp"#include "original_lib.hpp"debug_magic.hpp:#pragma once#ifdef DEBUG #define protected public #define private public#endif编译时:g++ -DDEBUG xxx.cpphttps://github.com/htfy96/CppToys/tree/master/privateMagic
■网友
不要用 hack!没有版权问题的话改第三方库源码就可以了,然后 diff 出 patch库更新的时候 apply patch,加在build step里面你也可以直接去库开发者那里提issue不要用奇怪的 hack!
■网友
先答题。可以继承一个类给这个属性弄一个getter。因为属性是protected的,所以在子类中也能使用,不破坏原有库代码。*******************************************发表一下观点:private是面向对象编程史上最愚蠢的关键字,给属性加getter/setter的行为除了多写代码没有任何用处,而编程语言为这个功能提供语法糖属于精神病行为(比如C# / Ruby)。原因有机会再写。正确的处理访问权限的方式应该是提供接口,比如C的.h文件,如果不暴漏不相关的全局变量或函数你就无法调用。这种方式就像电脑后面的接口,推荐你只操作这些东西,当然也不妨碍你打开机箱看看里面有什么,换换里面的元件。
■网友
在JAVA里可以在你继承的这个类里加一个内部类作为访问接口
■网友
乍一看到标题,结合今天的日期,不知不觉的想歪了。。。(逃
推荐阅读
- 如果你的多肉出现这个长势,要注意这个细节,多肉才会越来越美!
- 为啥看到书柜上的藏书会有心旷神怡的感觉
- 有啥方法,网站,项目可以自己练习计算广告学
- |全液晶仪表盘,颜值大涨!全新思域换代,不得不看!
- 某公司推出他们的3C产品,如果你是这个公司的电子商务运营主管,前期的运营你打算怎样开展这些工作
- 中年|如果汽车亏电:自动挡汽车能「推车点火」吗?
- 如果把DNS从godaddy转到DNSPOD是不是所有的二级域名都要重新设置,然后等这个各个ISP的缓存重新解析啊
- 插电源时,笔记本用不用拔电池?
- 如果做好一个手机股票软件
- 通过物理地址和IP地址能监控到啥
