/* 友元访问辅助类 */
template<class T>
class FriendAccess
{
friend typename T;
FriendAccess() {}
};
/* 示例:类A的方法f()限定只有类B可以访问:*/
class A(){
public:
void f(FriendAccess<B>){} //限制了只有类B的实例可以访问
};
class B(){
public:
void call(){
A a;
a.f(FriendAccess<B>());
}
};
/* 原理:
FriendAccess的构造函数为private,但是他的友元类T是可以访问其构造函数的
这样只有在T的类部才能构造A::f()的实参,从而限制了A::f()只能在B类中调用
*/