私人内部阶级的朋友功能

时间:2014-03-17 11:30:56

标签: 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);
        }       
    }
}

2 个答案:

答案 0 :(得分:8)

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

在代码中:

·H:

class Outer
{
    class Inner
    {
        int data;

        friend swap(Inner& lhs, Inner& rhs);     
    }
    friend swap(Inner& lhs, Inner& rhs);
}

的.cpp:

void swap(Outer::Inner& lhs, Outer::Inner& rhs)
{
    using std::swap;
    swap(lhs.data, rhs.data);
} 

答案 1 :(得分:1)

要做到这一点,你需要在.cpp文件中定义它,就像任何其他函数一样:

Outer::Inner::swap(Outer::Inner& lhs, Outer::Inner& rhs)
{
    using std::swap;
    swap(lhs.data, rhs.data);
}