为什么要用Wrapper模板?
很多时候,工程项目里要写很多个子类,都要继承同一个父类,以实现多态(各种设计模式就不多说了)。同一类簇(这里指前面提到的各种相关类,父类+子类)可能需要实现很多类似的业务代码。由此产生大量的重复劳动,而且一不小心写错将导致不一致BUG。C++使用模板可以保证一致性,减少BUG、减少团队大量的瞎折腾。另外常见的模板template<class T>其中T是无法调用内部函数的,一个解决方案就是使用wrapper将原本的类包裹一层,以使用其中各种方法。通过模板实现什么工厂模式啊、XX模式啊就轻松了,基本可以一套模板通用,就是常说的抽象XX模式。
使用Wrapper
1. 声明一个公共接口
1 class ObjInterface 2 { 3 public: 4 virtual void SayHello() = 0; 5 } ;
2. 公共父类
class Object : public ObjInterface { public: virtual void SayHello(); };
3. 各种子类Obj1 Obj2 .. ObjN继承自Object
4.定义一个 TObjWrapper
template<class T> class TObjWrapper { private: ObjInterface *interface; public: ObjWrapper(T *obj) { interface = (ObjInterface *)obj; } ~ObjWrapper(); void SayHello() { //TODO: 安全检查 interface->SayHello(); } };
一些实例
template<class T> class TFactory { public: static T * Create() { TObjectWrapper<T> _wrapper(NULL); _wrapper->Create(); return (T *)_wrapper; // 重载T *函数返回产生的指针 } };
使用:Car *car = TFactory<Car>::Create()
后记
Wrapper模板可以将您所需要调用的接口封装起来,供其他模板使用,以节约大量冗余代码。使用方便轻巧,易查BUG。不过模板一旦发生打错指针啊神马的问题编译器报错比较乱。
本文随性而发,,难免有考虑不周,还请指正。