Поскольку одна из ваших библиотек использует BDD
в качестве псевдонима только для int
(я предполагаю, что эта библиотека называется lib1
, а другая lib2
), вы можете просто изменить имя этого псевдонима.сказав препроцессору переименовать его перед включением библиотеки, например, так:
#define BDD BDD_lib1
#include <lib1>
#undef BDD
#include <lib2>
Если вам когда-либо понадобится использовать имя BDD
из lib1
в вашем коде, вы можете ссылаться на него с помощью BDD_lib1
(или просто с int
, если вы не беспокоитесь о том, что его тип может измениться в будущей версии lib1
).
Однако я бы счел этот подход только обходным путем,и не является правильным решением, так что вы можете подумать о том, чтобы поступить так, как предложил @YSC в своем ответе, и предоставить исправление, чтобы другие люди, пытающиеся использовать библиотеки, не столкнулись с той же проблемой.
эта работа в более общем сценарии?
Если бы BDD
был не просто псевдонимом простого типа, а отдельным классом, он мог бы столкнуться с проблемами из-за искажения имени в C ++, поэтому этот метод будет работать, только еслиимя BDD
яне важно ни в каких сценариях, где искажение имени появилось бы.Это накладывает более или менее следующие ограничения:
BDD
не должно иметь никаких не встроенных методов - любых типов в зависимости от
BDD
(например, специализация A<BDD>
изшаблон класса template <typename> class A;
является типом, зависящим от `BDD), не должен иметь никаких не встроенных методов - все функции / методы, список аргументов которых включает типы в зависимости от
BDD
, должны быть либо встроенными, либо иметь связь с C