Clang3.6版本的Checker

一,Clang源码如下:

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

二,模拟实现Checker

头文件

/********************************                                                         ** Author : szyu** Date : 2016.12.27*********************************/#ifndef __SZYU_CLANG__#define __SZYU_CLANG__#include 
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 
class Checker;template <>class Checker
{public:    static void    _register()    {        std::cout << "In Checker
::_register()" << std::endl;        DefaultClass::_register();    }};template 
class Checker : public T1, public Checker
{public:    static void    _register()    {        std::cout << "In Checker
::_register()" << std::endl;        T1::_register();        Checker
::_register();    }};#endif

测试用例

/********************************                                                               ** Author : szyu** Date : 2016.12.27*********************************/#include "register.h"voidtest1(){    typedef Checker
 Checker1;    Checker1::_register();    std::cout << "=====================" << std::endl;    typedef Checker
 Checker2;    Checker2::_register();    std::cout << "=====================" << std::endl;    typedef Checker
 Checker3;    Checker3::_register();    std::cout << "=====================" << std::endl;    typedef Checker
 Checker4;    Checker4::_register();    std::cout << "=====================" << std::endl;}intmain( int argc, char *argv[] ){    test1();    return 0;}

执行结果