第8条 友元模板
友元的声明有四种准则:
一、如果给出显示的模板实参,将被认为是模板的具现。
二、如果被一个名字空间或者类所限,在这个限定内确实可以匹配的函数或者类,那么就匹配这个东东。
三、如果这之内有一个可以匹配的函数模板,那么可以认为是这个函数模板的隐式特化。
四、否则就是一个普通函数。
一、如果给出显示的模板实参,将被认为是模板的具现。
二、如果被一个名字空间或者类所限,在这个限定内确实可以匹配的函数或者类,那么就匹配这个东东。
三、如果这之内有一个可以匹配的函数模板,那么可以认为是这个函数模板的隐式特化。
四、否则就是一个普通函数。
这里面给出的准则是关于友元的声明,可以写成如下两种:
friend void boost::checked_deleted(Test* x);
friend void boost::checked_deleted<>(Test* x);
friend void boost::checked_deleted<Test>(Test* x);
越明确的给出参数被认为是越好的办法,如果这样不行,不要忘了typedef。