如何编写C++类函数,允许外部函数通过指针修改类成员?
解决方案
可以在cFoo类中新增一个成员函数,返回私有成员m_bar的地址,让外部函数能通过该地址直接修改m_bar的值。由于func2需要接收char**类型的参数,这个成员函数的返回类型正好匹配。
修改后的类代码
class cFoo { private: char *m_bar; public: char *bar(void) {return m_bar;} void set_bar(char *newBar) {m_bar = newBar;} // 返回m_bar的指针,供外部函数修改 char** get_bar_ptr() { return &m_bar; } };
调用方式
cFoo fooInst; func2(fooInst.get_bar_ptr()); // 此时可正常修改m_bar
原理说明
get_bar_ptr()返回的是m_bar的地址(类型为char**),完全适配func2的参数要求,外部函数通过解引用该地址就能直接修改类的私有成员。- 这种方案无需改动遗留的
func2,也不会破坏现有代码结构,符合无损重构的需求。
重构过渡建议
如果后续需要逐步优化,可以在get_bar_ptr()内部添加日志、参数校验等逻辑,逐步替代直接暴露指针的方式,同时保持外部调用接口不变,实现平滑过渡:
char** get_bar_ptr() { // 可在此添加日志、校验等重构逻辑 return &m_bar; }
内容的提问来源于stack exchange,提问作者Pierre
相关产品推荐
相关产品推荐

