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