3

我在 C++ 的仅头库中遇到了循环依赖问题,当使用源文件而不是使所有内容都成为头文件时,这不会是循环依赖问题。

情况是这样的:

两个类 A 和 B 有四个文件。每个类都有它的头文件(例如“A.hpp”)和它的实现文件(例如“A.tpp”)。

依赖关系如下:

  • A's header 需要 B' header
  • A 的 impl 需要 B 的标头
  • B 的标头只需要对 A 的前向声明
  • B 的 impl 需要 A 的标头

因此,在基于源的库中,按照以下源文件包含和编译的顺序,一切都会好起来的:

  • B.hpp
  • A.hpp
  • A.tpp 或 B.tpp(这里的顺序不重要)

我的文件的结构是这样的:

A.hpp 的文件内容:

#ifndef A_H
#define A_H
#include "B.hpp"
class A { ... };
#include "A.tpp"
#endif

A.tpp 的文件内容:

#ifndef A_H
    #error "Do not include this file directly."
#endif
// ... some implementations for A.hpp

B.hpp 的文件内容:

#ifndef B_H
#define B_H
class A;
class B { ... };
#include "B.tpp"
#endif

B.tpp 的文件内容:

#include "A.hpp"
#ifndef B_H
    #error "Do not include this file directly."
#endif
// ... some implementations for B.hpp

所以我的问题是:有没有一种解决方案可以打破这种不必要的循环依赖关系,这种依赖关系只是因为我为我的库使用了仅标头解决方案而发生的?

4

0 回答 0