由于友元函数可以在本地类中声明,如以下示例所示。如果在函数定义中定义了无法在其外部访问的本地类的成员,它如何用于访问它?
void foo()
{
void bar();
class MyClass
{
int x;
friend void bar();
};
}
void bar() { // error: cannot access local class here }
int main()
{
//..
}
答案 0 :(得分:1)
在foo()之外无法访问MyClass,因此您无法从foo()外部访问其任何方法。
如果你想在完成对foo()的调用之后使用bar(),那么让MyClass从某个基类继承或实现一些接口,然后你就可以调用它实现接口的方法。 / p>
答案 1 :(得分:1)
函数bar()
无法访问函数class MyClass
中定义的foo()
。如果您需要访问该类,请将其从foo()
函数中删除。
答案 2 :(得分:1)
本地类中的friend
函数声明对于函数模板特化仍然有用。这只适用于C ++ 11,因为在C ++ 03中,本地类型不能是模板参数。
template< typename t >
int bar( t &o ) {
return ++ o.x;
}
int main()
{
class MyClass
{
int x;
friend int bar<>( MyClass &o );
public:
MyClass() : x( 0 ) {}
};
MyClass m;
std::cout << bar( m ) << ", " << bar( m ) << '\n';
}
否则,我不知道这些声明如何能够完成任何事情。