Ran*_*lus 0 c++ templates class function
在Lippman p656上,我读到:
nontemplate函数或类可以是类模板的朋友:
template<class Type> class Bar {
friend class Foobar;
friend void fcn();
};
Run Code Online (Sandbox Code Playgroud)
我想知道这一切意味着什么.如果fcn成为朋友,那是因为你希望它访问私有成员Bar,但如果没有任何Bar对象作为参数传入,它怎么能访问它呢?
有人可以赐教这个吗?
作为一个friend类X意味着朋友(无论是函数还是类)可以访问该类的所有私有和受保护成员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
}
Run Code Online (Sandbox Code Playgroud)
只是为了强调差异,考虑另一个功能:
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!
}
Run Code Online (Sandbox Code Playgroud)
希望它可以帮助您理解访问类的私有成员意味着什么,以及成为friend一个类的意义!