2012-01-05 77 views
0

由于朋友函数可以在本地类中声明,如以下示例所示。在函数定义中定义的本地类的成员不能在其外部访问时,如何用它访问本地类的成员?如何使用本地类的朋友功能?

void foo() 
{ 
    void bar(); 

    class MyClass 
    { 
     int x; 
     friend void bar(); 
    }; 
} 

void bar() { // error: cannot access local class here } 

int main() 
{ 
    //.. 
} 

回答

1

MyFlass在foo()之外无法访问,因此您无法从foo()外部访问其任何方法。

如果您想在调用foo()完成后使用bar(),请让MyClass从某个基类继承或实现某个接口,然后您将能够调用其实现接口的方法。

+0

MyClass在示例中没有任何方法。朋友功能是一项免费功能,而不是一种方法。 – Potatoswatter 2012-01-05 08:23:38

1

功能bar()无法访问功能foo()中定义的class MyClass。如果您需要访问该课程,请将其从foo()函数中取出。

1

A friend本地类中的函数声明对于函数模板特化仍然有用。这在C++ 11中才是真的,因为在C++中,本地类型不能是模板参数。

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'; 
} 

http://ideone.com/vcuml

否则,我没有看到这样的声明是如何完成任何事情。