3 回答
TA贡献1872条经验 获得超3个赞
您希望使该模板的一个实例(一般称为“专业化”)成为朋友。您可以通过以下方式进行
template <class T, class U>
class Pair{
public:
Pair(T v1, U v2) : val1(v1), val2(v2){}
~Pair(){}
Pair& operator=(const Pair&);
friend ostream& operator<< <> (ostream&, Pair<T,U>&);
private:
T val1;
U val2;
};
因为编译器从参数列表中知道模板参数是T和U,所以您不必将<...>它们放在之间,因此可以将其保留为空。请注意,您必须operator<<在Pair模板上方放置一个声明,如下所示:
template <class T, class U> class Pair;
template <class T, class U>
ostream& operator<<(ostream& out, Pair<T,U>& v);
// now the Pair template definition...
TA贡献1909条经验 获得超7个赞
简单的内联版本:
template<typename T> class HasFriend {
private:
T item;
public:
~HasFriend() {}
HasFriend(const T &i) : item(i) {}
friend ostream& operator<<(ostream& os, const HasFriend<T>& x) {
return os << "s(" << sizeof(x) << ").op<<" << x.item << endl;
}
};
修改后的模板版本:
template<template<typename /**/> class U, typename V>
ostream& operator<<(ostream &os, const U<V> &x) {
return os << "s(" << sizeof(x) << ").op<<" << x.item << endl;
}
template<typename T> class HasFriend {
private:
T item;
public:
~HasFriend() {}
HasFriend(const T &i) : item(i) {}
friend ostream& operator<<<>(ostream&, const HasFriend<T>&);
};
- 3 回答
- 0 关注
- 499 浏览
添加回答
举报