【问题标题】:Type condition in C++ template class problemC++模板类问题中的类型条件
【发布时间】:2010-08-22 13:00:34
【问题描述】:

使用 GCC 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>'

为什么会这样?如何解决? 提前致谢!

【问题讨论】:

标签: c++ templates metaprogramming


【解决方案1】:

在第二种情况下,RET 是什么,取决于模板类型T。编译器需要确保它将成为所有可能的实例化中的类型(并且可能不是某些 IF 实例化的静态成员)。您可以使用 typename 关键字来执行此操作。

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

};

【讨论】:

  • 嗯,我们不能使用 Clang 自动回答那些 typename 问题吗? :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-22
  • 2011-02-25
相关资源
最近更新 更多