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

У меня проблемы с циклической зависимостью в библиотеке с заголовком для 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

Итак, мой вопрос: есть ли решение для разрыва этой необычной циклической зависимости, которая возникает только из-за того, что я использую решение только для заголовков для моей библиотеки?

2

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]