在类模板中专门化一个已定义的类型?

时间:2013-08-06 18:03:53

标签: c++ templates

例如

template<class T>
struct Foo
{
    typedef int Type;
    void f();
}

Foo<T>::f()可以专门针对特定的T。如何定义类型Type?如果它有效,我不需要专门化整个班级。有没有办法实现这个意图?

1 个答案:

答案 0 :(得分:2)

template<class T>
struct Foo
{
  typedef typename some_class_template<T>::type Type;
  void f();
};

成员函数具有声明和定义,您可以专门定义。对于成员类型,无法做到这一点。这些必须专门用于声明。

当然,我的some_class_template可以是标准库中的任何内容,例如

  typedef typename std::conditional<sizeof(T)==4, int, T>::type Type;