内部类-嵌套类作为C++中成员函数的参数

inner classes - nested class as a parameter for the member function in C++

本文关键字:成员 函数 参数 C++ 嵌套 内部类      更新时间:2023-10-16

我正在集成某人的代码,它将所有内容都放在一个cpp文件中。主要代码如下:

class Outer
{
public:
   struct Inner
   {
      struct In_inner
      {
         ...
      }
   }
   int func(Inner& inn, Inner::In_inner& in_inn)
   {
      ...
   } 
}

要进行分离,我是否应该为"内部"参数添加"外部::",如下所示?

在头文件中

class Outer
{
public:
   struct Inner
   {
      struct In_inner
      {
         ...
      }
   }
   int func(Inner& inn, Inner::In_inner& in_inn);
}

和在cpp文件中:

int Outer::func(Outer::Inner& inn, Outer::Inner::In_inner& in_inn)
{
    ...
} 

参数列表与声明有点不同,这听起来有点奇怪。此外,我可以再次将所有内容保存在同一个文件中,并将其作为头文件包括在内吗?

感谢您的评论!

int Outer::func(Outer::Inner& inn, Outer::Inner::In_inner& in_inn)

是的。你写得对。如果在类外定义Outer::,则必须添加它。


参数列表与声明有点不同,这听起来有点奇怪

没关系。函数是在类之外定义的。你已经不在这个类的范围内了。因此,它看起来有点不同。

但是,如果您不希望它看起来不同,那么您也可以在声明中写入Outer::,如下所示:

class Outer
{
public:
   //...
   int func(Outer::Inner& inn, Outer::Inner::In_inner& in_inn);
};

这很好,而且会起作用,因为Outer是一个注入的名称,它在类中也可用。

struct A
{
    struct B { 
        struct C {};
    };
    B b1;    //okay - as usual
    A::B b2; //this is also okay - not so usual though
    B::C c1;    //okay - as usual
    A::B::C c2; //this is also okay - not so usual though
    A::A::A::A::A::A *pA; //this is very very unsual. But it is also okay!
};

最后一行是可以的,因为名称A被注入到类A的定义中。因此,它变得递归可用。

看它编译得很好:

  • http://www.ideone.com/oiy2h

参数列表没有什么不同;类型是相同的。在头文件中具有明确限定的std::成员并在源文件中使用using namespace std;也很常见。这基本上是一样的。

如何限定类型并不重要,只要它们引用相同的类型即可。由于您不在源文件中Outer的范围内,因此需要进行明确的限定。

在类声明/定义中,您位于Outer::的范围内。除此之外(在你的.cpp中),你不是。是的,您可以将函数定义保留在头中:它是一个隐式内联。