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?