内部类-嵌套类作为C++中成员函数的参数
inner classes - 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
的定义中。因此,它变得递归可用。
看它编译得很好:
- http://www.ideone.com/oiy2h
参数列表没有什么不同;类型是相同的。在头文件中具有明确限定的std::
成员并在源文件中使用using namespace std;
也很常见。这基本上是一样的。
如何限定类型并不重要,只要它们引用相同的类型即可。由于您不在源文件中Outer
的范围内,因此需要进行明确的限定。
在类声明/定义中,您位于Outer::的范围内。除此之外(在你的.cpp中),你不是。是的,您可以将函数定义保留在头中:它是一个隐式内联。
相关文章:
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 将公共但非静态的成员函数与ALGLIB集成
- 使用指向成员的指针将成员函数作为参数传递
- 将重载的成员函数传递给函数模板
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 如何在C++中使用非静态成员函数作为回调函数
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 关联容器的下界复杂性:成员函数与非成员函数
- 在 C++ 中用派生类型重写成员函数
- 链表的泛型函数remove()与成员函数remove)
- 如何将lambda作为模板类的成员函数参数
- constexpr构造函数需要常量成员函数时出现问题
- 将自由函数绑定为类成员函数
- 区分非成员函数和头文件中的成员函数
- 如何从子成员函数修改父公共成员变量
- 保留对其他类的成员函数的引用
- 在运算符重载定义中使用成员函数(const错误)
- 内联如何影响模块接口中的成员函数
- 将成员函数指针作为参数传递给模板方法