|  |      1codehz      2020-12-16 15:12:44 +08:00  1 (你可以把私有函数不做成方法* 直接在 cpp 文件里做成普通 static 函数 ,不要试图用两个不同的头文件,有 abi 问题 | 
|  |      4Aspector      2020-12-16 15:20:06 +08:00 用 pointer to implementation ?再写一个 impl 类不放头文件,用一个私有成员指针指过去。 | 
|      5unifier      2020-12-16 15:24:23 +08:00 抽一个父类出来做接口?对外只暴露父类,可能需要配合工厂模式食用?不过感觉比 1 楼的方法更复杂了 | 
|      6imkerberos      2020-12-16 15:27:12 +08:00 impl 模式. | 
|  |      7wutiantong      2020-12-16 15:47:17 +08:00 十年前 obj-c 还没有 extension 时,我就用 impl 模式写过这种需求 | 
|  |      8enenaaa      2020-12-16 15:49:16 +08:00 看看 qt 源码, 很多这样的写法。 | 
|  |      9geelaw      2020-12-16 15:52:27 +08:00 via iPhone 不存在这种功能,C++ 里私有成员是接口而不是实现细节,这主要体现在字段影响内存布局、友元、可以被重写的私有虚拟成员、名字解析(私有成员会参与名字解析)。 曲线救国的思路是 pimpl 或者接口化。 | 
|      10aneostart173      2020-12-16 16:13:55 +08:00 外面只暴露接口,里面在 impl 一个类,或者只提供 c api 。 | 
|  |      11lakehylia      2020-12-16 16:19:53 +08:00 纯虚函数接口配合 createInstance 和 releaseInstance,妥妥的 | 
|  |      12weidaizi      2020-12-16 16:23:06 +08:00 ////////////////////////////// // foo.h class Foo { public: static Foo* newFoo(); void Bar(); } ----------------------------------------------------------- ////////////////////////////// // foo_impl.h #include "foo.h" class FooImpl : public Foo { public: void Bar(); private: void Xyz(); }; ----------------------------------------------------------- 然后对外只暴露 foo.h 即可 | 
|      13Wirbelwind      2020-12-16 16:48:18 +08:00 | 
|      14Wirbelwind      2020-12-16 16:50:43 +08:00  1 | 
|  |      15weidaizi      2020-12-16 16:52:59 +08:00 上面那个回复,忘记写 virtual 了,囧 ////////////////////////////// // foo.h class Foo { public: static Foo* newFoo(); virtual void Bar(); } ----------------------------------------------------------- ////////////////////////////// // foo_impl.h #include "foo.h" class FooImpl : public Foo { public: virtual void Bar() override; private: void Xyz(); private: ....... }; ----------------------------------------------------------- 然后对外只暴露 foo.h 即可 | 
|      16jimmyismagic      2020-12-16 16:56:37 +08:00 上面说得很清楚,暴露个父类出来,可以是纯虚类,也可以是模板类 | 
|      17Wirbelwind      2020-12-16 17:03:28 +08:00 还有个使用 using 的办法 不建议继承写法 项目里面这样的写法多了之后 后期维护的人会头大 不简洁直观 |