为什么我们在C ++模板完整指南中的Promotion Traits类中需要void类型?

时间:2014-09-07 21:38:25

标签: c++ metaprogramming traits

我正在阅读模板完整指南,并有一个问题:

假设我们有模板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;

0 个答案:

没有答案