友元模版


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>*);
}
posted @ 2009-11-09 02:53  史莱姆  阅读(148)  评论(0编辑  收藏  举报