zoukankan      html  css  js  c++  java
  • Wrapper模板

    为什么要用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。不过模板一旦发生打错指针啊神马的问题编译器报错比较乱。
        本文随性而发,,难免有考虑不周,还请指正。

      

    除非注明,Cydonia博客文章均为原创,转载请以链接形式标明本文地址

      

    博客地址:http://www.cnblogs.com/cydonia/

  • 相关阅读:
    HTML课堂笔记
    pycrul使用
    计算机网络概述
    重温冒泡排序
    初识MySQL
    宝塔Linux面板安装教程
    运维和shell
    nginx学习总结
    docker学习汇总
    linux 安装redis 完整步骤
  • 原文地址:https://www.cnblogs.com/cydonia/p/2960552.html
Copyright © 2011-2022 走看看