zoukankan      html  css  js  c++  java
  • 代码小技巧

    先上一段代码:
    class  CTagBase
    {
    public:
        
    virtual ~CTagBase()
        {}

        
    virtual  void  Init()  =  0;
    };

    #define  MakeDeriveClass( XDerive )        \
                
    class  XDerive : public CTagBase        \
                {        \
                
    public:        \
                    
    virtual  void  Init()        \
                    {  AtlMessageBox( NULL, __FUNCTION__  ); }  \
                };

    MakeDeriveClass( CMacroDeriveFromBase1 )
    MakeDeriveClass( CMacroDeriveFromBase2 )
    MakeDeriveClass( CMacroDeriveFromBase3 )

    CMacroDeriveFromBase1  macroDerive1;
    CMacroDeriveFromBase2  macroDerive2;
    CMacroDeriveFromBase3  macroDerive3;

    macroDerive1.Init();
    macroDerive2.Init();
    macroDerive3.Init();
    此代码利用宏创建了CMacroDeriveFromBase1CMacroDeriveFromBase2CMacroDeriveFromBase3三个类,这3个类的结构是一样的。从某种意义上说,此时宏方便了我们编码,但是调试时的确不直观了.下面用模板的tag手法重构一下:
    template<typename>
    class  CTagDerive : public CTagBase
    {
    public:
        
    virtual  void  Init()
        { AtlMessageBox( NULL, __FUNCTION__  ); }
    };

    struct  STagDeriveFromBase1_Tag 
    {};
    typedef  CTagDerive
    <STagDeriveFromBase1_Tag>  CTagDeriveFromBase1;

    struct  STagDeriveFromBase2_Tag 
    {};
    typedef  CTagDerive
    <STagDeriveFromBase1_Tag>  CTagDeriveFromBase2;

    struct  STagDeriveFromBase3_Tag 
    {};
    typedef  CTagDerive
    <STagDeriveFromBase1_Tag>  CTagDeriveFromBase3;



    CTagDeriveFromBase1  tagDerive1;
    CTagDeriveFromBase2  tagDerive2;
    CTagDeriveFromBase3  tagDerive3;

    tagDerive1.Init();
    tagDerive2.Init();
    tagDerive3.Init();
    tag手法可以看作trait手法的一种简化,目的在于产生不同的类型.
  • 相关阅读:
    Oracle把表记录恢复到指定时间节点
    解决Idea配置文件不显示中文的问题
    maven过滤配置文件
    文件流字符串互转
    jax-rs下载文件
    Excel导入异常Cannot get a text value from a numeric cell解决及poi导入时注意事项
    oracle获取表字段及表注释的相关操作
    pb SendMessage
    pb datawindow的用法
    charindex函数的用法
  • 原文地址:https://www.cnblogs.com/fangkm/p/1543487.html
Copyright © 2011-2022 走看看