Bridge模式/ Pimpl惯用法 实例
来源:互联网 发布:namecheap 域名绑定 编辑:程序博客网 时间:2024/05/16 14:36
函数对象(仿函数)实现多态
方法:
1- 把仿函数类的数据和/或多态移到另一个类中。
2-然后给你的仿函数一个指向这个新类的指针。例子:函数对象中的虚函数会出现分割问题(因为STL的函数对象作为参数/返回值时是通过值传递的)
template<typenameT>
class BPFC: // BPFC =“Big Polymorphic
public // FunctorClass”
unary_function<T,void> {
private:
Widget w; // 这个类有很多数据,
Int x; // 所以用值传递
... // 会影响效率
public:
virtual voidoperator()(const T& val) const; // 这是一个虚函数,
... // 所以切割时会出问题
改为桥接模式实现:1,把所有数据和虚函数放到实现类
2,建立一个包含一个指向实现类的指针的小而单态的类
template<typename T> // 用于修改的BPFC
class BPFCImpl
public unary_function<T, void> { // 的新实现类
private:
Widget w; // 以前在BPFC里的所有数据
int x; // 现在在这里
...
virtual ~BPFCImpl(); // 多态类需要
// 虚析构函数
virtual void operator()(const T& val) const;
friend classBPFC<T>; // 让BPFC可以访问这些数据
};
template<typename T>
class BPFC: // 小的,单态版的BPFC
public unary_function<T, void> {
private:
BPFCImpl<T>*pImpl; // 这是BPFC唯一的数据
public:
void operator()(const T& val) const // 现在非虚;
{ // 调用BPFCImpl的
pImpl->operator()(val);
}
...
};
BPFC::operator()的实现例证了BPFC所有的虚函数是怎么实现的:它们调用了在BPFCImpl中它们真的虚函数。
结果是仿函数类(BPFC)是小而单态的,但可以访问大量状态而且行为多态------Bridge模式/Pimpl惯用法(设计模式)
注意:
必须保证BPFC的拷贝构造函数对指向的BPFCImpl对象做了合理的事情;
或者将指向的BPFCImpl对象的指针放入shared_ptr中。
- Bridge模式/ Pimpl惯用法 实例
- 设计模式之pimpl惯用法C++版
- pimpl 惯用法的背后
- 设计模式之pimpl惯用法C语言版(城门失火 殃及池鱼)
- 编译防火墙——C++的Pimpl惯用法解析
- 编译防火墙——C++的Pimpl惯用法解析
- Exceptional C++读书笔记:编译器防火墙与Pimpl惯用法(一)
- Qt的pimpl模式,和Bridge模式用法和例子
- bridge模式实例
- PIMPL模式
- PIMPL模式
- 旧话重提:pImpl惯用手法的背后
- 旧话重提:pImpl惯用手法的背后
- 旧话重提:pImpl惯用手法的背后
- 旧话重提:pImpl惯用手法的背后
- 旧话重提:pImpl惯用手法的背后
- 旧话重提:pImpl惯用手法的背后
- 旧话重提:pImpl惯用手法的背后
- ASP.NET中TimeSpan的介绍
- 余额宝能干扰市场利率抬高社会成本吗?
- SimpleAdapter使用
- 关于应用JavaScript百度地图的各种问题
- android 高效加载大图
- Bridge模式/ Pimpl惯用法 实例
- 京东白条抢滩消费信贷 赔钱抢市场
- jquery loading效果
- Darwin Streaming Server编译运行过程
- 监管趋严 预警余额宝类基金
- OpenCV图像缩放操作
- ACM 尺取法 poj 3320
- 移动互联网造浪 赴美上市或创10年新高
- Fly记事本1.0版本 C#记事本源码