私人内部阶级的朋友功能

roz*_*ina 4 c++ private friend

我有以下问题.我有一个私人内部班级.我现在想为内部类实现一个朋友交换函数.但是我不知道如何制作非内联交换功能.如果我在内部类中定义它一切正常.如果有人可以告诉我如何使它非内联我会非常感激:)

一些代码确实说明了问题:

class Outer
{
    class Inner
    {
        int data;

        friend swap(Inner& lhs, Inner& rhs)  // what is the syntax to 
        {                                    // make this function non inline?
            using std::swap;
            swap(lhs.data, rhs.data);
        }       
    }
}
Run Code Online (Sandbox Code Playgroud)

roz*_*ina 8

我想我找到了解决方案.起初对我来说有点奇怪,但这很有道理.当我尝试在.cpp文件中编写交换函数的定义时,编译器告诉我交换无法访问Inner,因为它是私有的.解决方案是让这个交换功能成为Outer的朋友!

在代码中:

.H:

class Outer
{
    class Inner
    {
        int data;

        friend swap(Inner& lhs, Inner& rhs);     
    }
    friend swap(Inner& lhs, Inner& rhs);
}
Run Code Online (Sandbox Code Playgroud)

的.cpp:

void swap(Outer::Inner& lhs, Outer::Inner& rhs)
{
    using std::swap;
    swap(lhs.data, rhs.data);
} 
Run Code Online (Sandbox Code Playgroud)