C++ 模板类问题中的类型条件

2024-04-29

使用海湾合作委员会4.2。 我有这个条件类型的元模板:

template <bool condition, typename Then, typename Else>
struct IF
{
    typedef Then RET;
};

template <class Then, class Else>
struct IF<false, Then, Else>
{
    typedef Else RET;
};

当我这样使用它时:

template <typename T>
class Param
{
    IF< sizeof(int)<sizeof(long), long, int>::RET  i;
};

它有效,但是当我像这样使用它时(尝试使用模板参数):

template <typename T>
class Param
{
    IF< sizeof(int)<sizeof(long), T&, T* >::RET mParam;
};

我收到此错误代码:

error: type 'IF<false, T&, T*>' is not derived from type 'Param<T>'

为什么会发生这种情况?怎么解决呢? 提前致谢!


在第二种情况下,什么RET是,取决于模板类型T。编译器需要确保它将是所有可能实例化中的类型(并且可能不是 IF 某些实例化的静态成员)。你这样做与typename关键词。

template <typename T>
class Param
{
    typename IF< sizeof(int)<sizeof(long), T&, T* >::RET mParam;

};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 模板类问题中的类型条件 的相关文章

随机推荐