返回类型

时间:2015-05-23 05:00:03

标签: c++ templates template-specialization

我有一个带有模板方法的类,该参数定义了返回类型。其他一切的默认构造函数都可以,但对于bool,我希望该方法返回true。我试图将它专门化为以下代码,但这不会编译。

class Foo {
    template <class T>
    T method() {
        ...
        return T();
    }

    template<>
    bool method() {
       ...
       return true;
    }

};

我怎么能做到这一点?

2 个答案:

答案 0 :(得分:2)

您无法在类范围内进行专门化。根据C ++标准,

  

14.7.3 / 2 应在包含专用模板的命名空间中声明显式特化。

因此,您应该在命名空间范围内专门化模板成员函数,

template<> // this should be outside the primary template class definition
bool Foo::method() {
    return true;
}

答案 1 :(得分:1)

您可以使用SFINAE来达到理想的效果,从技术上来说,可以实现&#34;专业化&#34; (这不可能是另一个答案解释的)过载:

template <class T>
typename std::enable_if<
    ! std::is_same< T, bool >::value,
    T
>::type
method() {
    ...
    return T();
}

template <class T>
typename std::enable_if<
    std::is_same< T, bool >::value,
    T
>::type
method() {
    ...
    return true;
}

以上是C ++ 11,使用C ++ 14,您甚至可以使用std::enable_if_t缩短它。

Live example