c++ - 内部类和封闭类分开定义

标签 c++ header-files inner-classes circular-dependency code-separation

如果封闭类有一个作为内部类实例的成员变量,将内部类和封闭类的定义分离到不同的头文件中的正确方法是什么?

这是Outer(封闭类)的 header :

//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的标题:

//inner.h
#ifndef INNER_H_INCLUDED
#define INNER_H_INCLUDED

#include "outer.h"

class Outer::Inner
{
    /* definition */
};

#endif

这不会编译。问题是两个类必须看到彼此的定义。是否有可能打破循环依赖并仍然保持定义分离?

最佳答案

没有。您能做的最好的事情就是存储一个指向内部类的指针(或者可能是引用),这使得 Inner 不完整。这通常称为 pImpl 习惯用法。

关于c++ - 内部类和封闭类分开定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46382406/

相关文章:

c - 如何在 VS 2022 中正确安装附加 C 头文件

java - 将最终变量传递给匿名类

c++ - 计算一个字符串在一个字符串中出现的次数

c++ - 在C++和OpenCV中调用其他文件中的函数

c++ - 在混合图形芯片的低功耗端使用 OpenGL

iphone - Xcode - 根据目标导入具有相同名称的不同头文件

java - 获取Java内部类的外部类实例的类名

java - 内部类中 this.new 和 bare this 的行为

java - 在 Windows 中使用 swig 从 Java 调用 c++ 函数,得到 java.lang.UnsatisfiedLinkError

c++ - 是否可以强制父类(super class)中的非 const 虚方法优先于子类中同名的 const 方法?