我正在阅读模板完整指南,并有一个问题:
假设我们有模板IfThenElse,它采用布尔非类型模板参数来选择两种类型参数之一:
template<bool C, typename Ta, typename Tb> class IfThenElse;
template<typename Ta, typename Tb>
class IfThenElse<true, Ta, Tb>
{
public:
typedef Ta ResultT;
};
template<typename Ta, typename Tb>
class IfThenElse<false, Ta, Tb>
{
public:
typedef Tb ResultT;
};
促销课程:
template<typename T1, typename T2>
class Promotion;
template<typename T1, typename T2>
class Promotion
{
public:
typedef typename IfThenElse<(sizeof(T1) > sizeof(T2)),
T1,
typename IfThenElse<(sizeof(T1) < sizeof(T2)),
T2,
void>::ResultT>::ResultT ResultT;
};
因此,如果sizeof(T1)&gt; sizeof(T2),ResultT给出T1和sizeof(T1)&lt; sizeof(T2),我们有T2。但是,否则,它会导致ResultT无效。
有人可以解释,为什么? 为什么我们不能写出像
这样的东西typedef typename IfThenElse<(sizeof(T1) > sizeof(T2)),
T1,
T2>::ResultT ResultT;