fre*_*low 6 c++ templates swap
以下方法之间有区别吗?
// 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);
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试专门交换我自己的字符串类型并注意到它swap<::string>不起作用时,我很困惑,但是出于完全不同的原因:)
就在这里.但不是在那个特定的例子中.如果没有推导出参数,它可以产生影响
template<typename T> void f(typename T::type t);
Run Code Online (Sandbox Code Playgroud)
你不能专注于<type>它,因为它无法推断出T参数列表中的内容.
struct MyType { typedef int type; };
// needs <MyType>
template<> void f<MyType>(int t) { }
Run Code Online (Sandbox Code Playgroud)
当然,在你的情况下,它是有向图<:的意思与[导致你的问题相同.放一个空间就好< ::string>避免这个问题.