我正在閱讀“C tempalte,完整指南”一書的第 2.4 節。
我試圖將輸出運算子 (<<) 覆寫為類模板之外的函式模板。 Stack<>
下面是我的代碼,但它不起作用。
#include <iostream>
#include <string>
#include <vector>
template<class T>
class Stack
{
private:
std::vector<T> v;
public:
void push(T a);
void printOn(std::ostream & os) const;
template <typename U>
friend std::ostream& operator<< (std::ostream& out, const Stack<U> & s);
};
template<typename T>
std::ostream& operator<< (std::ostream out, const Stack<T> & s)
{
s.printOn(out);
return out;
}
template<class T>
void Stack<T>::push(T a)
{
v.push_back(a);
}
template<class T>
void Stack<T>::printOn(std::ostream & out) const
{
for(T const & vi : v)
{out << vi << " ";}
}
int main()
{
Stack<int> s1;
s1.push(12);
s1.push(34);
std::cout << s1;
}
uj5u.com熱心網友回復:
您只是省略了&,這使得operator<<類的內部和外部具有不同的函式簽名,它們都對 有效std::cout << s1,因此模棱兩可
template<typename T>
std::ostream& operator<< (std::ostream& out, const Stack<T> & s)
// ^
{
s.printOn(out);
return out;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/439667.html
上一篇:T除了一類
下一篇:Java泛型-引數中的平等約束
