模板:如何判断模板参数T为内建数据类型

来源:互联网 发布:双色球 知乎 编辑:程序博客网 时间:2024/05/18 01:59
#include <iostream>
#include <string>
using namespace std;

//基本模板,一般情况下T不是基本类型
template <typename T>
class IsFundaT {
    public:
        enum { Yes=0, No=1 };
};

//用于特化基本类型的宏
#define MK_FUNDA_TYPE(T)           \
    template<> class IsFundaT<T> {   \
        public:                                       \
            enum { Yes=1, No=0 };           \
    };                                                    \

//内建类型的具体特化
MK_FUNDA_TYPE(void)
MK_FUNDA_TYPE(bool)
MK_FUNDA_TYPE(char)
MK_FUNDA_TYPE(signed char)
MK_FUNDA_TYPE(unsigned char)
MK_FUNDA_TYPE(wchar_t)

MK_FUNDA_TYPE(signed short)
MK_FUNDA_TYPE(unsigned short)
MK_FUNDA_TYPE(signed int)
MK_FUNDA_TYPE(unsigned int)
MK_FUNDA_TYPE(signed long)
MK_FUNDA_TYPE(unsigned long)
#if LONGLONG_EXISTS
    MK_FUNDA_TYPE(signed long long)
    MK_FUNDA_TYPE(unsigned long long)
#endif //LONGLONG_EXISTS

MK_FUNDA_TYPE(float)
MK_FUNDA_TYPE(double)
MK_FUNDA_TYPE(long double)

//以下为测试程序
template <typename T>
void test(const T& t){
    if(IsFundaT<T>::Yes){
        cout<<"T is fundamental type" <<endl;
    }else {
        cout<<"T is not  fundamental type" <<endl;
    }
}

class MyType{
};

int main(int argc, char *argv[]){
    test(7);
    test(7.1);
    test(MyType());
    return 0;
}
0 0
原创粉丝点击