使用 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>'
为什么会这样?如何解决? 提前致谢!
最佳答案
在第二种情况下,RET
是什么,取决于模板类型T
。编译器需要确保它将成为所有可能实例化中的类型(并且可能不是 IF 的某些实例化的静态成员)。您可以使用 typename
关键字来实现。
template <typename T>
class Param
{
typename IF< sizeof(int)<sizeof(long), T&, T* >::RET mParam;
};
关于c++ - C++模板类问题中的类型条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3541557/