Sto utilizzando sia la libreria JUCE che un numero di intestazioni Boost nel mio codice. Juce definisce "T" come una macro (gemito), e Boost spesso usa "T" nelle sue definizioni di template. Il risultato è che se in qualche modo includi le intestazioni JUCE prima delle intestazioni Boost, il preprocessore espande la macro JUCE nel codice Boost, e quindi il compilatore viene perso irrimediabilmente.Posso ridefinire una macro C++ e poi definirla?
Mantenere il mio include nel giusto ordine non è difficile il più delle volte, ma può diventare complicato quando si ha una classe JUCE che include alcune altre classi e da qualche parte sulla catena un file include Boost, e se c'è ne i file prima che servisse un JUCE includono che sei nei guai.
mio iniziale speranza al fixing questo doveva
#undef T
prima di qualsiasi include per Boost. Ma il problema è che se non lo ri-definisco, allora un altro codice si confonde che "T" non è dichiarato.
Allora ho pensato che forse avrei potuto fare un po 'circolare #define inganno in questo modo:
// some includes up here
#define ___T___ T
#undef T
// include boost headers here
#define T ___T___
#undef ___T___
Brutto, ma ho pensato che potrebbe funzionare.
Purtroppo no. Ottengo errori in luoghi con "T" come una macro che
'___T___' was not declared in this scope.
C'è un modo per rendere questi due biblioteche funzionano in modo affidabile insieme?
Perché si sta definendo __T__ su T e quindi si deseleziona immediatamente T (e viceversa in basso)? –
Immagino di poter risolvere il problema cercando la definizione originale e ridefinendo il concetto, ma preferirei avere qualcosa di più universale e affidabile. – Aftermathew
Jim non sono sicuro se la formattazione abbia reso la tua domanda più difficile da capire, ma ho pensato che fosse pulito nella mia domanda? Pensi di poter riformulare la tua domanda? – Aftermathew