[C++模板]Clang3.6版本的Checker

Clang3.6版本的Checker

一,Clang源码如下:

template <typename CHECK1, typename CHECK2=check::_VoidCheck,
          typename CHECK3=check::_VoidCheck, typename CHECK4=check::_VoidCheck,
          typename CHECK5=check::_VoidCheck, typename CHECK6=check::_VoidCheck,
          typename CHECK7=check::_VoidCheck, typename CHECK8=check::_VoidCheck,
          typename CHECK9=check::_VoidCheck, typename CHECK10=check::_VoidCheck,
          typename CHECK11=check::_VoidCheck,typename CHECK12=check::_VoidCheck,
          typename CHECK13=check::_VoidCheck,typename CHECK14=check::_VoidCheck,
          typename CHECK15=check::_VoidCheck,typename CHECK16=check::_VoidCheck,
          typename CHECK17=check::_VoidCheck,typename CHECK18=check::_VoidCheck,
          typename CHECK19=check::_VoidCheck,typename CHECK20=check::_VoidCheck,
          typename CHECK21=check::_VoidCheck,typename CHECK22=check::_VoidCheck,
          typename CHECK23=check::_VoidCheck,typename CHECK24=check::_VoidCheck>
class Checker;

template <>
class Checker<check::_VoidCheck>
  : public CheckerBase
{
  virtual void anchor();
public:
  static void _register(void *checker, CheckerManager &mgr) { }
};

template <typename CHECK1, typename CHECK2, typename CHECK3, typename CHECK4,
          typename CHECK5, typename CHECK6, typename CHECK7, typename CHECK8,
          typename CHECK9, typename CHECK10,typename CHECK11,typename CHECK12,
          typename CHECK13,typename CHECK14,typename CHECK15,typename CHECK16,
          typename CHECK17,typename CHECK18,typename CHECK19,typename CHECK20,
          typename CHECK21,typename CHECK22,typename CHECK23,typename CHECK24>
class Checker
    : public CHECK1,
      public Checker<CHECK2, CHECK3, CHECK4, CHECK5, CHECK6, CHECK7,
                     CHECK8, CHECK9, CHECK10,CHECK11,CHECK12,CHECK13,
                     CHECK14,CHECK15,CHECK16,CHECK17,CHECK18,CHECK19,
                     CHECK20,CHECK21,CHECK22,CHECK23,CHECK24> {
public:
  template <typename CHECKER>
  static void _register(CHECKER *checker, CheckerManager &mgr) {
    CHECK1::_register(checker, mgr);
    Checker<CHECK2, CHECK3, CHECK4, CHECK5, CHECK6, CHECK7,
            CHECK8, CHECK9, CHECK10,CHECK11,CHECK12,CHECK13,
            CHECK14,CHECK15,CHECK16,CHECK17,CHECK18,CHECK19,
            CHECK20,CHECK21,CHECK22,CHECK23,CHECK24>::_register(checker, mgr);
  }
};

二,模拟实现Checker

头文件

/********************************                                                         
*
* Author : szyu
*
* Date : 2016.12.27
*
********************************/

#ifndef __SZYU_CLANG__
#define __SZYU_CLANG__

#include <iostream>

class DefaultClass
{
public:
    static void
    _register()
    {   
        std::cout << "In DefaultClass::_register()" << std::endl;
    }   
};

class FunctionClass1
{
public:
    static void
    _register()
    {   
        std::cout << "In FunctionClass1::_register()" << std::endl;
    }
};

class FunctionClass2
{
public:
    static void
    _register()
    {
        std::cout << "In FunctionClass2::_register()" << std::endl;
    }
};

class FunctionClass3
{
public:
    static void
    _register()
    {
        std::cout << "In FunctionClass3::_register()" << std::endl;
    }
};

template <typename T1, typename T2 = DefaultClass, typename T3 = DefaultClass>
class Checker;

template <>
class Checker<DefaultClass>
{
public:
    static void
    _register()
    {
        std::cout << "In Checker<DefaultClass>::_register()" << std::endl;
        DefaultClass::_register();
    }
};

template <typename T1, typename T2, typename T3>
class Checker : public T1, public Checker<T2, T3>
{
public:
    static void
    _register()
    {
        std::cout << "In Checker<T1, T2, T3>::_register()" << std::endl;
        T1::_register();
        Checker<T2, T3>::_register();
    }
};

#endif

测试用例

/********************************                                                               
*
* Author : szyu
*
* Date : 2016.12.27
*
********************************/

#include "register.h"

void
test1()
{
    typedef Checker<DefaultClass> Checker1;
    Checker1::_register();
    std::cout << "=====================" << std::endl;

    typedef Checker<FunctionClass1> Checker2;
    Checker2::_register();
    std::cout << "=====================" << std::endl;

    typedef Checker<FunctionClass1, FunctionClass2> Checker3;
    Checker3::_register();
    std::cout << "=====================" << std::endl;

    typedef Checker<FunctionClass1, FunctionClass2, FunctionClass3> Checker4;
    Checker4::_register();
    std::cout << "=====================" << std::endl;
}

int
main( int argc, char *argv[] )
{
    test1();

    return 0;
}

执行结果

时间: 2024-08-06 11:57:24

[C++模板]Clang3.6版本的Checker的相关文章

[C++模板]Clang3.9使用变参模拟实现CheckerFn和Checker

Clang3.9使用变参模拟实现CheckerFn和Checker 一,使用变参实现CheckerFn 1,头文件 /*********************************                                         * * Author : szyu * * Date : 2017.1.4 * ***********************************/ #ifndef __SZYU_CLANG__ #define __SZYU_CL

JuCheap V2.0响应式后台管理系统模板正式发布beta版本

JuCheap V1.* 查看地址: http://blog.csdn.net/allenwdj/article/details/49155339 经过半年的努力,JuCheap后台通用响应式管理后台模板框架,终于有V1.*正式升级到了JuCheap V2.0 beta版本. 首先介绍下JuCheap V2.0的基础技术: 1.相对于V1.*版本的框架,更加的简洁 2.T4模板,一键生成多种类型的文件 3.DI容器,由MEF改成了AutoFac,可选属性注入和构造函数注入两种方式. 4.真正的响

web.xml 模板和Servlet版本

最近没事干,写自己小项目(项目周期无限长.开发效率无限低)的时候,遇到web.xml的dtd声明不正确,这里罗列下从Eclipse里新建项目时,自动生成的web.xml,供以后遇到类似问题的时候进行参考.当然web.xml.Servlet版本.JSP版本.HTTP版本之间有着诸多联系,笔者不太懂,就不多说了. web.xml web.xml 3.0 <?xml version="1.0" encoding="UTF-8"?> <web-app xm

开发Unity3D插件_战机游戏模板Pro版本

此战机游戏模板插件是本人由Fighter Flight Template Pro和Fighter Weapon System Template整合开发完成. 使用本模板,可以帮助您轻松地创建您自己的战机类游戏. 游戏控制 模板特点 Pro版本的战斗机模型的制作更加精细,并且每个战机模型都包含一个着陆动画. 战机的飞行系统是根据现代战机的空气动力学所设计的. 战机的HUD系统可以自动计算和显示战机当前的 Speed, Altitude, Heading, Pitch Ladder, Horizon

C++ 模板与泛型编程

<C++ Primer 4th>读书笔记 所谓泛型编程就是以独立于任何特定类型的方式编写代码.泛型编程与面向对象编程一样,都依赖于某种形式的多态性. 面向对象编程中的多态性在运行时应用于存在继承关系的类.我们能够编写使用这些类的代码,忽略基类与派生类之间类型上的差异. 在泛型编程中,我们所编写的类和函数能够多态地用于跨越编译时不相关的类型.一个类或一个函数可以用来操纵多种类型的对象. 面向对象编程所依赖的多态性称为运行时多态性,泛型编程所依赖的多态性称为编译时多态性或参数式多态性. 模板是泛型

Red style books store OpenCart 主题模板 ABC-0117

Red style books store OpenCart 主题模板 ABC-0117 RED STYLE BOOKS STORE OPENCART 主题模板 ABC-0117 Designed with luxurious colorsSuitable for shop selling: Books , templates, Card, picture, Art, Photography..Designed by CSS, HTMLSupports multiple languages, m

Attractive Music Store OpenCart 自适应主题模板 ABC-0237

Attractive Music Store OpenCart 自适应主题模板 ABC-0237 模板特性 OpenCart版本1.5.5, 1.5.5.1, 1.5.6, 1.5.6.1, 1.5.6.2, 1.5.6.3, 1.5.6.4 包含文件PHP Files, CSS Files, JS Files 详情地址http://www.chinaopencart.cn/index.php?route=product/product&product_id=374

Pav Metro Store OpenCart 自适应主题模板 ABC-0215

Pav Metro Store OpenCart 自适应主题模板 ABC-0215 模板特性 OpenCart版本 1.5.4.1, 1.5.5, 1.5.5.1, 1.5.6 包含文件 PHP Files, CSS Files, JS Files,PSD Files

Milano Store OpenCart 2.0 主题模板 ABC-0473

Milano Store OpenCart 2.0 主题模板 ABC-0473 模板特性 OpenCart版本 2.0.0.0 包含文件 PHP Files, CSS Files, JS Files