关闭

C++中模板类使用友元模板函数

发表于:2014-11-06 09:47

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Jessica程序猿    来源:51Testing软件测试网采编

  在类模板中可以出现三种友元声明:
  (1)普通非模板类或函数的友元声明,将友元关系授予明确指定的类或函数。
  (2)类模板或函数模板的友元声明,授予对友元所有实例的访问权。
  (3)只授予对类模板或函数模板的特定实例的访问权的友元声明。
  (1)普通友元:
  template<class T>
  class A{
  friend void fun();
  //...
  };
  此例中fun可访问A任意类实例中的私有和保护成员
  (2)一般模板友元关系
  template<class type>
  class A{
  template<classT>
  friend void fun(T u);
  //...
  };
  这时友元使用与类不同的模板形参,T可以是任意合法标志符,友元函数可以访问A类的任何类实例的数据,即不论A的形参是int,double或其他都可以。
  (3)特定的模板友元关系
  template <class T> void fun(T,u);//对与特定的模板友元关系,这里的声明是必须的
  template<class T>
  class A{
  friend voidfun<T>(T u);//这里也可以是friend void fun<char>(char u);
  //...
  };
  此时fun只有访问类中特定实例的数据。换句话说,此时具有相同模板实参的fun函数与A类才是友元关系。即假如调用fun时其模板实参为int,则它只具有A<int>的访问权限。当然friendvoid fun<T>(Tu);中<>中的T可以是任意类型,比如int,double等
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号