以下方法之间有区别吗?
// approach 1
namespace std
{
template<>
void swap<Foo>(Foo& x, Foo& y) // note the <Foo>
{
x.swap(y);
}
}
// approach 2
namespace std
{
template<>
void swap(Foo& x, Foo& y)
{
x.swap(y);
}
}
当我尝试专门交换我自己的字符串类型并注意到swap<::string>
不起作用,但出于完全不同的原因时,我弄乱了这一点:)
答案 0 :(得分:8)
是的,有。但不是在那个特定的例子中。如果没有推导出参数,它可以产生差异
template<typename T> void f(typename T::type t);
如果没有<type>
,则无法对其进行专门化,因为它无法从参数列表中推断出T
。
struct MyType { typedef int type; };
// needs <MyType>
template<> void f<MyType>(int t) { }
当然,在您的情况下,有问题的<:
与[
的含义相同,导致您的问题。放置<
::string>
之类的空格以避免此问题。
答案 1 :(得分:0)
此外,您不需要专注于这种情况,只需过载并感到高兴。
namespace std
{
void swap(Foo& x, Foo& y)
{
x.swap(y);
}
}