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

Clang3.6版本的Checker

创新互联主要从事网站设计制作、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务陇川,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

一,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"

void
test1()
{
    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;
}

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

    return 0;
}

执行结果

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


网站标题:[C++模板]Clang3.6版本的Checker
文章路径:http://pwwzsj.com/article/pehgpi.html