Есть ли способ разбить круговые зависимости, такие как следующие, не перемещая как алиасы using/typedef
вне классов?C++ циклическая зависимость от общедоступных псевдонимов (typdef/using), определенных внутри класса/структуры
// header A.h
#ifdef A
#define A
#include "B.h"
class A {
using ID = uint32_t;
void some_func(B::ID id);
};
#endif A
// header B.h
#ifdef B
#define B
#include "A.h"
class B {
using ID = uint64_t;
void some_func(A::ID id);
};
#endif B
// main.cpp
#include "A.h"
int main() {...}
Предположим, защитные #ifdef
ы присутствуют и идентификатор может быть более сложным типом (а struct
и т.д.).
Редактирование: немного разъяснений: псевдонимы не обязательно одинаковы (то есть не ID
).
Модифицированный пример:
// header A.h
#ifdef A
#define A
#include "B.h"
class A {
using SomeAliasInA = uint32_t;
void some_func(B::SomeAliasInB id);
};
#endif A
// header B.h
#ifdef B
#define B
#include "A.h"
class B {
using SomeAliasInB = std::string;
void some_func(A::SomeAliasInA id);
};
#endif B
Спасибо за ответ. Ваше решение кажется разумным, если псевдонимы имеют одинаковое имя. Я уточнил вопрос с разъяснением. –
@JimmyBazooka Тот же ответ применяется, вы можете иметь столько typedef или псевдонимов, сколько хотите в struct 'types'. – Quest