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

问题描述 投票:6回答:2

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

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

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

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

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

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

c++ templates function return-value template-specialization
2个回答
1
投票

编译器将根据提供的信息(此处为函数返回类型)推导出正确的模板特化。

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


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.