假设我有一个函数模板,其中type参数仅用作返回类型:
template <typename T>
T foo()
{
return whatever;
}
那么专门化该功能模板的正确语法是什么?以下两项似乎都有效:
template <>
std::string foo()
{
return whatever;
}
template <>
std::string foo<std::string>()
{
return whatever;
}
这两者有什么区别吗?如果没有,那么惯用的方式是什么?
答案 0 :(得分:1)
编译器将根据提供的信息(这里是函数返回类型)推断出正确的模板特化。
因此,这些语法具有完全相同的行为,一种比另一种更明确。
答案 1 :(得分:1)
在大多数情况下,两者之间没有区别。
如果你重载了几个模板函数,可能需要第二种形式来消除你想要专门化的重载的歧义(如果你处于这种情况,你可能还有其他问题,例如你还需要明确在通话地点)。