我有以下问题。我有一个私人内部班级。我现在想为内部类实现一个朋友交换函数。但是我不知道如何制作非内联交换功能。如果我在内部类中定义它一切正常。如果有人可以告诉我如何使其非内联,我将非常感激它:)
有些代码确实说明了问题:
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);
}
}
}
答案 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);
}