http://en.cppreference.com/w/cpp/language/friend
这里已经写的很清楚了
还有一种方法是这样:
#include <iostream>
template<typename T>
class Foo {
public:
Foo(const T& val) : data(val) {}
private:
T data;
template<typename U>
friend std::ostream& operator<< (std::ostream&, const Foo<U>&);
};
// definition
template<typename U>
std::ostream& operator<<(std::ostream& os, const Foo<U>& obj)
{
return os << obj.data;
}
int main()
{
Foo<double> obj(1.23);
std::cout << obj << '\n';
}