64,691
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include <iostream>
//#include <boost/pool/object_pool.hpp>
using namespace std;
template<typename T1, typename T2>
struct equal_{
enum {vaule = false};
};
template<typename T1>
struct equal_<T1,T1>{
enum {vaule = true};
};
int _tmain(int argc, _TCHAR* argv[])
{
cout<<equal_<int,int>::vaule<<endl;
cout<<equal_<int,double>::vaule<<endl;
return 0;
}
1
0
请按任意键继续. . .
//第一问
#include <iostream>
using namespace std;
template <class T1,class T2>
class EqualOrNot{
putlic:
EqualOrNot(int);
~EqualOrNot();
bool equal(T1,T2)
{
if(T1==T2)
return true;
else
return false;
}
private:
};
//第二问
#include <typeinfo.h>
using namespace std;
template <class T1,class T2,class T3>
class Count{
public:
judge(T1,T2,T3){
if(
if(typeid(T1)==typeid(T2)&&typeid(T2)==typeid(T3))
count=1;
if(typeid(T1)!=typeid(T2)&&typeid(T2)!=typeid(T3))
count=3;
)
else count=2;
private:
int count;
}
//isclasst.hpp:辨别类类型(class,struct,union)
#ifndef IS_CLASST_HPP
#define IS_CLASST_HPP
template<typename T>
class IsClassT{ //确定某个类型是否为类类型
private:
typedef char One;
typedef struct{
char a[2];
} Two;
template<typename C>
static One test(int C::*); //C是类类型时使用这个版本,函数参数是一个C的成员指针
template<typename C>
static Two test(...); //C是非类类型时使用这个版本
public:
enum { Yes=sizeof(test<T>(0))==1 }; //是类类型则Yes为1,不是类类型时Yes为0
enum { No=!Yes };
};
#endif
//ifthenelse.hpp:根据bool值来选择类型T1或T2
#ifndef IFTHENELSE_HPP
#define IFTHENELSE_HPP
template<bool C,typename Ta,typename Tb>
class IfThenElse; //基本模板,根据第1个实参来决定是选择第2个实参还是第3个实参
template<typename Ta,typename Tb>
class IfThenElse<true,Ta,Tb>{ //局部特化:true的话选择第2个实参
public:
typedef Ta ResultT;
};
template<typename Ta,typename Tb>
class IfThenElse<false,Ta,Tb>{ //局部特化,false的话选择第3个参数
public:
typedef Tb ResultT;
};
#endif
template<typename T1,typename T2,typename T3>
class LotOfClass{
int sumClass,sumBuildin,sumFunc;
public
LotOfClass():sum1(0),sum2(0),sum3(0){
}
void function(){
if(IsClassT<T1>::Yes)
sumClass++;
//...
}
//...
};
当然也可以直接用我博客中的那个Type<T>模板,更方便。