繁体   English   中英

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

[英]nested class as a parameter for the member function in C++

我正在集成某人的代码,该代码在一个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的定义中。 因此,它变得递归可用。

看到它编译良好:

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

只要它们引用相同的类型,如何限定类型就无关紧要。 并且由于您不在源文件的“ Outer ”范围内,因此在此处必须有明确的限定条件。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM