[英]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.