在C ++中专门化函数模板的语法

时间:2011-08-05 13:53:40

标签: c++ templates function return-value template-specialization

假设我有一个函数模板,其中type参数仅用作返回类型:

template <typename T>
T foo()
{
    return whatever;
}

那么专门化该功能模板的正确语法是什么?以下两项似乎都有效:

template <>
std::string foo()
{
    return whatever;
}

template <>
std::string foo<std::string>()
{
    return whatever;
}

这两者有什么区别吗?如果没有,那么惯用的方式是什么?

2 个答案:

答案 0 :(得分:1)

编译器将根据提供的信息(这里是函数返回类型)推断出正确的模板特化。

因此,这些语法具有完全相同的行为,一种比另一种更明确。

答案 1 :(得分:1)

在大多数情况下,两者之间没有区别。

如果你重载了几个模板函数,可能需要第二种形式来消除你想要专门化的重载的歧义(如果你处于这种情况,你可能还有其他问题,例如你还需要明确在通话地点)。