Kann ich ein C ++ - Makro neu definieren und dann wieder definieren?

Ich verwende sowohl die JUCE-Bibliothek als auch eine Reihe von Boost-Headern in meinem Code. Juce definiert "T" als Makro (Stöhnen) und Boost verwendet in seinen Vorlagendefinitionen häufig "T". Wenn Sie die JUCE-Header vor den Boost-Headern einfügen, erweitert der Präprozessor das JUCE-Makro im Boost-Code und der Compiler geht hoffnungslos verloren.

Meine Includes in der richtigen Reihenfolge zu halten ist die meiste Zeit nicht schwer, aber es kann schwierig werden, wenn Sie eine JUCE-Klasse haben, die einige andere Klassen enthält und irgendwo in der Kette eine Datei Boost enthält, und wenn eine der Dateien davor brauchte ein JUCE-Include du bist in Schwierigkeiten.

Meine anfängliche Hoffnung, dies zu beheben, war zu

#undef T

Vor jedem beinhaltet für Boost. Aber das Problem ist, wenn ich es nicht neu definiere, wird anderer Code verwirrt, dass "T" nicht deklariert ist.

Ich dachte dann, dass ich vielleicht ein paar zirkuläre #define-Tricks machen könnte:

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

Hässlich, aber ich dachte es könnte funktionieren.

Traurigerweise Nein. Ich erhalte Fehler an Stellen, an denen "T" als Makro verwendet wird

'___T___' was not declared in this scope.

Gibt es eine Möglichkeit, diese beiden Bibliotheken zuverlässig zusammenzuarbeiten?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage