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

#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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值