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