Круговая зависимость только для заголовка

У меня проблемы с циклической зависимостью в библиотеке с заголовком для C++, которая не была бы проблемой циклической зависимости при использовании исходных файлов вместо создания всего только заголовка.

Ситуация равна этому:

Существует четыре файла для двух классов A и B. Каждый класс имеет свой заголовочный файл (например, "A.hpp") и свой файл реализации (например, "A.tpp").

Зависимости следующие:

  • Заголовок A требует заголовка B'
  • Импульс А требует заголовок Б
  • Заголовок B не требует ничего, кроме предварительного объявления A
  • Импульс B требует заголовок 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 ответов

Другие вопросы по тегам