Estoy usando tanto la Biblioteca JUCE como una serie de encabezados Boost en mi código. Juce define "T" como una macro (gemido), y Boost a menudo usa "T" en sus definiciones de plantilla. El resultado es que si de alguna manera incluye los encabezados JUCE antes de los encabezados de Boost, el preprocesador expande la macro JUCE en el código de Boost, y luego el compilador se pierde irremediablemente.¿Puedo redefinir una macro de C++ y luego definirla de nuevo?
Mantener mi inclusión en el orden correcto no es difícil la mayor parte del tiempo, pero puede ser complicado cuando tienes una clase JUCE que incluye algunas otras clases y en algún lugar de la cadena un archivo incluye Boost, y si alguno los archivos antes de necesitar un JUCE incluyen que estás en problemas.
Mi esperanza inicial en la fijación de este era
#undef T
antes de cualquier incluye, por Boost. Pero el problema es que si no lo vuelvo a definir, entonces se confunde el otro código y no se declara "T".
Entonces pensé que tal vez podría hacer algo de engaño #define circular de este modo:
// some includes up here
#define ___T___ T
#undef T
// include boost headers here
#define T ___T___
#undef ___T___
feo, pero pensé que podría funcionar.
Lamentablemente no. Recibo errores en lugares usando "T" como una macro que
'___T___' was not declared in this scope.
¿Hay una manera de hacer estas dos bibliotecas funcionan de forma fiable juntos?
¿Por qué define __T__ a T y luego indefiniendo inmediatamente T (y viceversa a continuación)? –
Creo que puedo solucionarlo buscando la definición original y redefiniéndola, pero prefiero algo más universal y confiable. – Aftermathew
Jim no estoy seguro de si el formato hizo que su pregunta fuera más difícil de entender, ¿pero pensé que estaba limpia en mi pregunta? ¿Crees que puedes reformular tu pregunta? – Aftermathew