友元模版
1. 特化friend class
template<class T> class Node;
template<class T>
class Tree{
friend class Node<T>;
}
2. 特化friend function
1) 如果函数名前面没有::,就绝对不会引用某个template实体
2) 如果函数名前面含有::,编译器会优先匹配常规non-template 函数, 然后匹配function templates
namespace boost{
template<class T> void checked_delete(T* x);
}
class Test{
friend void boost::checked_delete<>(Test* x);
};
3. 把一个template 的所有实体都指定为某个class的friend.
class manager{
template<class T>friend class Task;
template<class T>friend void Schedule<T>::dispatch(Task<T>*);
}