如果不得不访问一个对象的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里可以在你继承的这个类里加一个内部类作为访问接口
■网友
乍一看到标题,结合今天的日期,不知不觉的想歪了。。。(逃


    推荐阅读