首先把要处理的情况分为2类:要处理的是“类型”还是“数据”,
类似于template < typename T1,typename T2 >和template < int,float >。
最基本的,对于template < int,float >这一类的,
----------------------------------------------------------
递归:
template < int x, int y >
class Power
{
public:
enum { result = x * Power < x, y-1 >::result };
};
template < int x >
class Power < x,1 >
{
public:
enum { result = x };
};
int main()
{
cout < < Power < 2, 8 >::result < < endl;
}
-----------------------------------------------------------
分支:
template < bool,int SwitchResult >
class IF
{
public:
enum { result=SwitchResult};
};
template < int TrueSwitchResult >
class IF < true,TrueSwitchResult >
{
public:
enum { result=TrueSwitchResult};
};
template < int FalseSwitchResult >
class IF < false,FalseSwitchResult >
{
public:
enum { result=FalseSwitchResult*2};
};
int main()
{
cout < < IF < (3 > 5),10 >::result < < endl;
cout < < IF < (3 < 5),10 >::result < < endl;
}
在复杂一点的测试,和上面的那个递归模板类结合测试:
int main()
{
cout < < IF < (3 > 5),Power < 2, 10 >::result >::result < < endl;
cout < < IF < (3 < 5),Power < 2, 10 >::result >::result < < endl;
}
-------------------------------------------------------
稍微复杂的,对于template < typename T1,typename T2 >这一类:
也就是以“类型”为基本数据的,需要一些“基础设施”成立之后才能验证,
比如说TypeList,怎样枚举每一个Type,之后在按照上面的思想进行验证。
具体可参见Modern C++ Design
没有评论:
发表评论