C++中的PIMPL和NVI
PIMP(指针成员指向实现,接口与实现分离)和NVI(非虚拟接口,私有虚函数)都是为了将不变的代码控制,需要变化的部分单独用一个函数包裹起来,PIMPL使用的委托,不过NVI使用的继承而已。
从设计模式上来讲,PIMP使用的策略模式,NVI使用的则是模板模式。
下面的Dowork() 具体工作,在不同的继承类中细化,可以是变化的,不过控制代码是不变的,这样即使Dowork() 需要修改,Base类却不需要编译,基类拥有控制权.
虚函数是动态绑定的,所以只要不是在类外部调用虚函数,仅类内部调用虚函数无所谓访问控制,最终调用的都是派生类的虚函数。
class Base
{
public :void Work(void){... // <-此处可以加入控制代码DoWork();... // <-此处可以加入控制代码} private:virtual void DoWork(void) = 0;
};
B即使需要修改,只要B的共有接口不变,pimpl总是个指针,对A 的布局不会发生影响,所以A自身不需要修改,使用A的类也不需要发生修改,也就不需要重新编译:
class A
{
public:void func(){//此处加入不变的控制代码pimpl->func();//此处加入不变的控制代码}
private:B* pimpl;
};
这样降低了耦合,也实现了信息的隐藏。
C++中的PIMPL和NVI相关推荐
- C++开发中的pImpl方法
PImpl(private implementation) 其主要作用是解开类的使用接口和实现的耦合.pImpl方法是微软的Herb Sutter提出来的,该方法是为了尽量减小接口和实现之间的耦合,以 ...
- 设计模式之Pimpl模式
Pimpl(pointer to implementation, 指向实现的指针)是一种常用的,用来对"类的接口与实现"进行解耦的方法.这个技巧可以避免在头文件中暴露私有细节(见下 ...
- C++必知必会RALL与Pimpl
系列文章目录 第一章 C++必知必会 第二章 C++后端开发必备的工具和调试知识 第三章 多线程编程与资源同步 第四章 网络编程重难点解析 第五章 网络通信故障排除常用命令 第六章 网络通信协议设计 ...
- GNU Make 使用手册(于凤昌中译版)
GNU Make 使用手册(中译版) 翻译:于凤昌 GNU make Version 3.79 April 2000 Richard M. Stallman and Roland McGrath 1 ...
- Exceptional C++ 读书笔记
Exceptional C++ 读书笔记 1 泛型程序设计与C++标准库(没看) Item 1 Iterator: 1)注意当前迭代器是否有效,如果无效则解引用产生程序错误: 2)注意当前迭代器生命 ...
- EffectiveC++
一.让自己习惯C++ 条款02:尽量以const,enum,inline替换#define 条款03:尽可能使用const 二.构造/析构/赋值运算 条款04:确定对象被使用前已先被初始化 条款05: ...
- C++ API设计笔记
<C++ API设计>原英文版由Martin Reddy著,中文版出版于2013年,这里是中文版的笔记. 1. API简介 1.1 什么是API:API(Application Progr ...
- 《Effective Modern C++》笔记
文章目录 绪论 第1章 型别推导 条款1:理解模板类型推导 情况1:ParamType 是个指针或引用,但不是万能引用 情况2:ParamType是万能引用 情况3:ParamType既非指针也非引用 ...
- C++ API 设计 章节链接
http://www.aiuxian.com/article/p-1301505.html 第三章 模式 前一章所讨论的品质是用来区分设计良好和糟糕的API.在接下来的几个章节将重点关注构建高品质的A ...
- C++ API 设计 08 第三章 模式
第三章 模式 前一章所讨论的品质是用来区分设计良好和糟糕的API.在接下来的几个章节将重点关注构建高品质的API的技术和原则.这个特殊的章节将涵盖一些有用的设计模式和C++ API设计的相关习惯用法. ...
最新文章
- Atitit 图像处理类库安装与安装模式的前世今生与未来大趋势attilax总结.docx
- 重写equals和hashCode
- 贵州大学开题报告计算机,贵州大学毕业论文开题报告.docx
- 汇编 --- 初体验
- preserve log什么意思_一些有意思的JavaScript代码片段
- 安装SQL2005提示“SQL Server 2005 COM+ 目录要求”警告 解决方法
- Soul 网关源码阅读(一) 概览
- 局域网计算机如何传输文件,局域网如何快速传输文件|同一个局域网传输文件的方法...
- VBA学习笔记4:将同一文件下的多个工作簿的数据汇总为一个工作表
- HTML-embed标签详解
- 各类排序算法汇总及动画演示(C语言)
- StatsD与Graphite联合作战
- python 基础知识点 (一)
- Java 统计接口消耗时间
- XILINX FPGA 7系之 CLB/LUT/FF/Multiplexers
- 计算空间中两线段之间的距离
- SpringBoot 中新建一个Controller类,提示从未使用过的解决方法
- 中国的市场营销部到底是怎么分工的,每个人到底在干什么事?
- 模电课程设计——信号发生器
- ladp3 获取属性_ldap3库:用多个值修改属性