繁体   English   中英

类模板的NonTemplate函数之友

[英]NonTemplate Function Friend of Class Template

在Lippman p656上,我读到:

非模板函数或类可以是类模板的朋友:

template<class Type> class Bar {
    friend class Foobar;
    friend void fcn();
}; 

我不知道这一切意味着什么。 如果fcn成为朋友,是因为您希望它访问Bar的私有成员,但是如果没有将任何Bar对象作为参数传递,它将如何访问它们呢?

有人可以启发我吗?

作为一个friend一类的X指的朋友(无论是功能,或类)可以访问类的所有private和protected成员X

在您的示例中,类Foobar和函数fcn可以访问Bar类的私有成员和受保护成员。

现在的问题是:

如果没有将任何Bar对象作为参数传递,它将如何访问它们?

好吧,如果它具有Bar实例,它就可以访问。 例如。

void fcn()
{
   Bar<int> bar;
   bar.PrivateFun(); //okay even if PrivateFun is a private function of Bar
   bar.PrivateData = 10; //okay even if PrivateData is a private data of Bar
}

为了强调差异,请考虑以下另一个功能:

void g()
{
   Bar<int> bar;
   bar.PrivateFun(); //compilation error - g() is not a friend of Bar!
   bar.PrivateData = 10; //compilation error - g() is not a friend of Bar!
}

希望它可以帮助您了解访问班级私人成员的含义以及成为班级friend的含义!

也许存在一个可以访问的全局Bar<T>仅仅因为没有明显的参数并不意味着它不能访问Bar<T> 而且,这是格式错误的语法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM