繁体   English   中英

返回类型对方法模板的专门化

[英]method template specialization by return type

我有一个带有模板方法的类,该方法的参数定义了返回类型。 其他所有的默认构造函数都可以,但是对于bool来说,我希望该方法返回true。 我正在尝试将其专门化为以下代码,但这无法编译。

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

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

};

我该如何实现?

您不能专门研究类范围。 根据C ++标准,

14.7.3 / 2必须在封闭专用模板的名称空间中声明显式专用。

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

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

您可以使用SFINAE达到所需的效果,从技术上讲,这会将“专业化”(这不能解释为其他答案)变成过载:

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使其更短。

现场例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM