2.5.2 友元函数模板
C++(www.cppentry.com)中的类可以声明友元函数和友元类,也可以声明友元函数模板和类模板。友元函数模板与类模板的任何实例都是该类的友元,可以访问类中私有成员。声明友元模板的例子如下:
- class citizen
- {
- int id;
- double money;
-
- template<typename T>
- friend class FBI_agent;
-
- template<typename T>
- friend T duty(citizen &);
-
- public:
- citizen(int id) : id(id) {}
- };
在上例中,citizen类声明了一个友元类模板FBI_agent。注意,在此无须为FBI_agent模板做前置声明。有此声明,无论是FBI_agent<Mulder>还是FBI_agent<Scully>,都可以访问到citizen类中的私有函数,比如id。此外,citizen中还声明了友元函数模板duty,无论是duty<military_service>还是duty<tax>,都可以访问甚至修改citizen中的成员,比如money。