//这里只判断 char * 类型
//type2test.cpp
#include <iostream>
///
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(char *)
#undef MK_FUNDA_TYPE
/
template <typename T>
void test (T const& t)
{
if(IsFundaT<T>::Yes){
std::cout << "T is fundamental /"char */" "<< std::endl;
}
else{
std::cout<<"T is no fundamental /"char */" "<<std::endl;
}
}
class MyType {
};
int main()
{
char * str ="test";
test(str);
test(7);
test(MyType());
}
// types/type1.hpp
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(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(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 //LONGLNG_EXISTS
MK_FUNDA_TYPE(float)
MK_FUNDA_TYPE(double)
MK_FUNDA_TYPE(long double)
#undef MK_FUNDA_TYPE
//types.type1test.cpp
#include <iostream>
#include "type1.h"
template <typename T>
void test (T const& t)
{
if(IsFundaT<T>::Yes){
std::cout << "T is fundamental type "<< std::endl;
}
else{
std::cout<<"T is no fundamental type "<<std::endl;
}
}
class MyType {
};
int main()
{
char * str ="test";
test(str);
test(MyType());
}
//c++ template 类型区分那章的代码我改啦一点点
//type2test.cpp
#include <iostream>
///
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(char *)
#undef MK_FUNDA_TYPE
/
template <typename T>
void test (T const& t)
{
if(IsFundaT<T>::Yes){
std::cout << "T is fundamental /"char */" "<< std::endl;
}
else{
std::cout<<"T is no fundamental /"char */" "<<std::endl;
}
}
class MyType {
};
int main()
{
char * str ="test";
test(str);
test(7);
test(MyType());
}
// types/type1.hpp
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(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(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 //LONGLNG_EXISTS
MK_FUNDA_TYPE(float)
MK_FUNDA_TYPE(double)
MK_FUNDA_TYPE(long double)
#undef MK_FUNDA_TYPE
//types.type1test.cpp
#include <iostream>
#include "type1.h"
template <typename T>
void test (T const& t)
{
if(IsFundaT<T>::Yes){
std::cout << "T is fundamental type "<< std::endl;
}
else{
std::cout<<"T is no fundamental type "<<std::endl;
}
}
class MyType {
};
int main()
{
char * str ="test";
test(str);
test(MyType());
}
//c++ template 类型区分那章的代码我改啦一点点