模板:如何判断模板参数T为内建数据类型(2)
来源:互联网 发布:广州seo建站 编辑:程序博客网 时间:2024/05/11 21:11
前面博客提到了如何判断T为内建数据类型,这篇博客将会进一步介绍如何确定内建数据类型的哪种具体类型
下面是具体的代码实现:
#include <iostream>
#include <string>
using namespace std;
//判断参数是否为内建类型(基本类型)
//基本模板,一般情况下T不是基本类型
template <typename T>
class IsFundaT {
public:
enum { Yes=0, No=1 , IsFloatingT=0 };
};
//基本模板,一般情况下不是float类型
template <typename T>
class IsFloatingT {
public:
enum { Yes=0, No=1};
};
//...其他的内建类型的具体类型基本模板
//用于特化基本类型的宏
#define MK_FUNDA_TYPE(T) \
template<> class IsFundaT<T> { \
public: \
enum { Yes=1, No=0, IsFloatingT = IsFloatingT<T>::Yes }; \
}; \
//特化内建类型的float的类型
template <>
class IsFloatingT<float> {
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){
if(IsFundaT<T>::IsFloatingT){
cout<<"T is floating" <<endl;
}else{
cout<<"T is fundamental type but is not floating" <<endl;
}
}else {
cout<<"T is not fundamental type" <<endl;
}
}
class MyType{
};
int main(int argc, char *argv[]){
test(7);
test((float)7.1); //7.1默认是dobule类型
test(MyType());
return 0;
}
- 模板:如何判断模板参数T为内建数据类型
- 模板:如何判断模板参数T为内建数据类型(2)
- 模板的使用:如何判断参数是否为一个类
- 如何在模板判断
- 利用模板判断模板参数类型
- C++模板参数为数组
- 模板[点在多边形内的判断]
- django 模板内建的模板过滤器
- 分析模板参数中 T& 与T 的区别
- C++ Template初探:以模板为参数的模板
- smarty模板判断数组为空
- 模板的模板参数
- 模板模板参数
- C++ 模板模板参数
- 模板参数
- 模板参数
- 模板参数
- 模板标签之如何传递模板标签参数
- 安卓开发异常之——java.lang.NoClassDefFoundError: com.umeng.analytics.d的问题
- Google Analytics与Google Adwords的转换数据差别
- SparkR的R3.3.1源码安装
- 博士这五年-李沐
- Android中两个Activity之间数据传递及返回
- 模板:如何判断模板参数T为内建数据类型(2)
- 使用cmake自动构建工程
- 接口测试从零开始系列_mock技术使用
- 2017,抓住机会,撸起袖子加油干!
- mysql与ftp连接过慢的原因(一半因为域名解析导致)
- Google Adsense检测作弊欺骗点击广告的方法
- STL 注意事项
- static 是在什么时候加载的(代码验证)
- YII2 Exception