c++ - 私有(private)内部类的友元函数

标签 c++ private friend

我有以下问题。我有一个带有私有(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);
        }       
    }
}

最佳答案

我想我找到了解决方案。起初我觉得有点奇怪,但这是有道理的。当我试图在 .cpp 文件中编写 swap 函数的定义时,编译器告诉我 swap 无法访问 Inner,因为它是私有(private)的。解决方案是让这个交换函数也成为 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);
} 

关于c++ - 私有(private)内部类的友元函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22453192/

相关文章:

c++ - 如何在C++中将枚举插入另一个枚举

c++ - 在捕获 `this->` 的 lambda 中使用 `this`

c++ - protected 和私有(private)有什么区别?

C++:私有(private)方法返回的本地 typedef

c++ - friend 类如何访问嵌套类的私有(private)成员?

c++ - C++中具有友元函数的多态性

.net - 使用相同的 key 对多个程序集进行签名 : wise/unwise?

c++ - std::ofstream 构造函数阻塞

c++ - 将范围传递给 C++ 算法时如何处理 iterator/const_iterator 不匹配?

Java setter 不会更改整数的值