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手法的一种简化,目的在于产生不同的类型.
  • 相关阅读:
    DOPE:基于蒸馏网络的全身三维姿态估计
    3D人体姿态重构
    Nginx+gunicorn+flask+docker算法部署
    MediaPipe中Box Tracking技术原理
    C++线程池
    MediaPipe加速流程和原理
    记一次illegal instruction问题定位
    如何阅读大工程代码(clickhouse版)
    zookeeper client原理总结
    go package依赖图自动生成
  • 原文地址:https://www.cnblogs.com/fangkm/p/1543487.html
Copyright © 2011-2022 走看看