如何使用本地类的朋友功能?

时间:2012-01-05 06:42:50

标签: c++ friend-function local-class

由于友元函数可以在本地类中声明,如以下示例所示。如果在函数定义中定义了无法在其外部访问的本地类的成员,它如何用于访问它?

void foo()
{
    void bar();

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

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

int main()
{
    //..
}

3 个答案:

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

http://ideone.com/vcuml

否则,我不知道这些声明如何能够完成任何事情。