Posso redefinir uma macro C ++ e defini-la de volta?

Estou usando a biblioteca JUCE e vários cabeçalhos Boost no meu código. Juce define "T" como uma macro (gemido) e Boost geralmente usa "T" em suas definições de modelo. O resultado é que, se você incluir os cabeçalhos JUCE antes dos cabeçalhos Boost, o pré-processador expande a macro JUCE no código Boost e, em seguida, o compilador fica irremediavelmente perdido.

Manter meus includes na ordem correta não é difícil a maior parte do tempo, mas pode ser complicado quando você tem uma classe JUCE que inclui algumas outras classes e em algum lugar da cadeia um arquivo inclui Boost, e se algum dos arquivos antes dele precisava de um JUCE incluir você está em apuros.

Minha esperança inicial em consertar isso era

#undef T

antes de qualquer inclui para Boost. Mas o problema é que, se eu não a re-definir, então outro código fica confuso que "T" não é declarado.

Eu então pensei que talvez eu pudesse fazer alguns truques #define circulares da seguinte forma:

// some includes up here
#define ___T___ T
#undef T
// include boost headers here
#define T ___T___
#undef ___T___

Feio, mas achei que poderia funcionar.

Infelizmente não. Eu recebo erros em lugares usando "T" como uma macro que

'___T___' was not declared in this scope.

Existe uma maneira de fazer essas duas bibliotecas funcionarem juntas de forma confiável?

questionAnswers(3)

yourAnswerToTheQuestion