Wil*_*lli 4 c++ class-template
以下两个片段有什么区别?
<T>
for 运算符 <<template<typename T>
class Stack {
...
friend std::ostream& operator<< <T> (std::ostream&,
Stack<T> const&);
};
Run Code Online (Sandbox Code Playgroud)
<T>
template<typename T>
class Stack {
...
friend std::ostream& operator<< (std::ostream&,
Stack<T> const&);
};
Run Code Online (Sandbox Code Playgroud)
在#1,编译器会查找调用的函数模板operator<<
,从而operator<< <T>
给了精确的签名,以及类Stack<T>
将只交好特定专业化。
在#2 中,编译器将查找具有给定精确签名的非模板函数operator<<
。如果找到了这样的功能,Stack<T>
就会和它成为朋友。如果找不到这样的函数,则声明该函数(但这是一个有问题的情况,因为没有办法对它进行一般定义)。