您现在的位置是:亿华云 > 系统运维
介绍一个C++中非常有用的设计模式
亿华云2025-10-05 02:13:59【系统运维】7人已围观
简介本文转载自微信公众号「程序喵大人」,作者程序喵大人。转载本文请联系程序喵大人公众号。大家好,今天介绍一个C++中非常常用的模式:pimpl至于它有什么作用,直接看代码://MyClass.hclass
本文转载自微信公众号「程序喵大人」,介绍作者程序喵大人。中非转载本文请联系程序喵大人公众号。设计
大家好,模式今天介绍一个C++中非常常用的介绍模式:pimpl
至于它有什么作用,直接看代码:
// MyClass.h class MyClass { public: void func1(); void func2(); private: void func3(); void func4(); int a; int b; };假设我们在开发一个SDK,中非或者设计某个模块,设计需要暴露出去一个MyClass.h头文件,模式并向用户提供func1和func2两个功能。介绍
但是中非MyClass中还有一些private函数和字段,这些函数和字段我们本意可能是设计不想被用户知道,因为可能里面有些隐私内容,模式用户有可能通过这些private方法和字段就能猜到我们的介绍架构及实现。
这也是中非我们平时设计模块需要注意的一点:只暴露出该暴露的东西。
那怎么做呢?设计答案就是高防服务器pimpl模式。
可以这样:
// MyClass.h class MyClass { public: void func1(); void func2(); private: class impl; impl* pimpl; }; // MyClass.cc class MyClass::impl { public: void func1(); void func2(); private: void func3(); void func4(); int a; int b; }; MyClass::MyClass() { pimpl = new impl; } void MyClass::func1() { pimpl->func1(); }将类的private属性隐藏进一个内部类,然后通过一个指针访问(提前声明)它的接口。在头文件中只暴露出应该暴露的功能,然后持有一个Impl的指针,而Impl则具体在MyClass.cc中定义,用户什么都看不到。然后所有的功能都通过Impl完成。头文件里的Impl的指针也可以通过智能指针(unique_ptr)来代替,但这不是本文的重点。
再总结一下pimpl模式的优点:
非常适合隐藏private实现:如果想要在头文件中暴露public接口,站群服务器但又不想暴露private实现的细节,则可以使用pimpl模式来隐藏细节。 pimpl模式也被称为编译防火墙,是一种用来减少编译时间的方法。通常来讲,如果头文件里的某些内容变更了,意味着所有引用该头文件的代码都要被重新编译,即使变更的是无法被用户类访问的私有成员。将这部分代码从被引用多次的头文件里移除到只被引用编译一次的源文件中,更改此文件就不会付出太长的编译时间。香港云服务器大家怎么看?
参考资料
https://en.cppreference.com/w/cpp/language/pimpl
很赞哦!(24)
相关文章
- 4、注册门槛低
- 一图看懂编程语言迁移模式:终点站是Python、Go、JS
- TIOBE 3月榜单:新功能将加入,C语言仍高居榜首
- Java编程内功-数据结构与算法「树」
- 审核通过的域名将显示在域名竞拍页面,并进入正式拍卖期,买家可以在拍卖周期内出价,加价幅度与拍卖保证金说明,点此查看。
- 程序员吐槽:2万的运营、3万的产品,4万的开发,干出的活还不值2万
- 使用Vite2+TypeScript4+Vue3技术栈,如何入手开发项目
- 合并Python列表的魔幻12法
- 互联网其实拼的也是人脉,域名投资也是一个时效性很强的东西,一个不起眼的消息就会引起整个域名投资市场的动荡,因此拓宽自己的人脉圈,完善自己的信息获取渠道,让自己能够掌握更为多样化的信息,这样才更有助于自己的域名投资。
- Vue 3.0 进阶之深入学习响应式 Refs API