Header-Only循环依赖

时间:2015-06-13 16:44:39

标签: c++ circular-dependency header-only

我在C ++的纯磁头库中遇到循环依赖问题,在使用源文件而不是只使用标题时,这不是循环依赖问题。

情况与此相同:

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

依赖关系如下:

  • A的标题需要B'标题
  • 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

所以我的问题是:是否有一个解决方案可以打破这种无关紧要的循环依赖,这只是因为我正在为我的库使用仅限标题的解决方案?

0 个答案:

没有答案