单独定义内部 class 和封闭 class
Separate definition of inner class and enclosing class
如果封闭的 class 有一个成员,将内部 class 和封闭的 class 的定义分离到不同的 header 文件中的正确方法是什么变量是内部 class?
的一个实例
这里是 Outer
的 header(封闭的 class):
//outer.h
#ifndef OUTER_H_INCLUDED
#define OUTER_H_INCLUDED
#include "inner.h"
class Outer
{
class Inner;
public:
/* public member functions */
private:
Inner inner_instance;
};
#endif
和Inner
的header:
//inner.h
#ifndef INNER_H_INCLUDED
#define INNER_H_INCLUDED
#include "outer.h"
class Outer::Inner
{
/* definition */
};
#endif
这不会编译。问题是两个 classes 必须看到彼此的定义。是否可以打破循环依赖并仍然保持定义分离?
没有。您可以做的最好的事情是存储指向内部 class 的指针(或者可能是引用),这允许 Inner
不完整。这通常被称为 pImpl
成语。
如果封闭的 class 有一个成员,将内部 class 和封闭的 class 的定义分离到不同的 header 文件中的正确方法是什么变量是内部 class?
的一个实例这里是 Outer
的 header(封闭的 class):
//outer.h
#ifndef OUTER_H_INCLUDED
#define OUTER_H_INCLUDED
#include "inner.h"
class Outer
{
class Inner;
public:
/* public member functions */
private:
Inner inner_instance;
};
#endif
和Inner
的header:
//inner.h
#ifndef INNER_H_INCLUDED
#define INNER_H_INCLUDED
#include "outer.h"
class Outer::Inner
{
/* definition */
};
#endif
这不会编译。问题是两个 classes 必须看到彼此的定义。是否可以打破循环依赖并仍然保持定义分离?
没有。您可以做的最好的事情是存储指向内部 class 的指针(或者可能是引用),这允许 Inner
不完整。这通常被称为 pImpl
成语。