C++ Trait特性萃取

c++定义了许多默认的Trait可供我们使用,比如is_ingegral,is_class,is_object等等,
今天突然想尝试自己实现一个,试了一下,成功了,虽然写的不太好,但还是很有收获:

#include
using namespace std;

//第一步:定义这个策略Trait,这个策略实现【char】与【非char】的判断。
template<typename T>
class IsChar
{
public:
    static const bool yes = 0;
};

template<>
class IsChar<char>
{
public:
    static const bool yes = 1;
};


//第二步:提升,根据策略实现不同反应。
template<bool c,typename T>
class Decision;

template<typename T>
class Decision<true, T>
{
public:
    static void print(T a){ cout <"--char"<< endl; };
};

template<typename T>
class Decision<false, T>
{
public:
    static void print(T a){ cout << a << "--not_char" << endl; };
};

//第三步:封装提升,只留一个接口。
template<typename T>
void ppt(T a)
{
    Decision::yes, T>::print(a);
}


int main()
{
    //测试一下
    ppt(1);
    ppt('c');

    system("pause");
    return 0;
}

输出:
1–not_char
c–char
请按任意键继续…

你可能感兴趣的:(c++)