Я использую в своем коде как библиотеку JUCE, так и ряд заголовков Boost. Juce определяет "T" как макрос (стон), а Boost часто использует "T" в своих определениях шаблонов. В результате, если вы каким-то образом включаете заголовки JUCE перед заголовками Boost, препроцессор расширяет макрос JUCE в коде Boost, а затем компилятор безнадежно теряется.
Сохранение моих включений в правильном порядке в большинстве случаев непросто, но может быть сложно, если у вас есть класс JUCE, который включает некоторые другие классы, а где-то в цепочке один файл включает Boost, и если какой-либо из файлы, прежде чем понадобится JUCE, включите в себя проблемы.
Моя первоначальная надежда на фиксацию этого была в
#undef T
перед тем, как включить в Boost. Но проблема в том, что если я не переопределяю его, тогда другой код путается, что "T" не объявлен.
Тогда я подумал, что, возможно, я мог бы сделать круговой трюк #define, например:
// some includes up here
#define ___T___ T
#undef T
// include boost headers here
#define T ___T___
#undef ___T___
Уродливо, но я думал, что это может сработать.
К сожалению нет. Я получаю ошибки в местах с использованием "T" в качестве макроса, который
'___T___' was not declared in this scope.
Есть ли способ, чтобы эти две библиотеки работали надежно вместе?