Czy mogę ponownie zdefiniować makro C ++, a następnie zdefiniować je z powrotem?

Używam zarówno biblioteki JUCE, jak i kilku nagłówków Boost w moim kodzie. Juce definiuje „T” jako makro (jęk), a Boost często używa „T” w definicjach szablonu. Rezultat jest taki, że jeśli w jakiś sposób umieścisz nagłówki JUCE przed nagłówkami Boost, preprocesor rozszerzy makro JUCE w kodzie Boost, a następnie kompilator zostanie beznadziejnie utracony.

Utrzymywanie moich załączników we właściwej kolejności nie jest trudne przez większość czasu, ale może stać się trudne, gdy masz klasę JUCE, która zawiera kilka innych klas i gdzieś w łańcuchu jeden plik zawiera Boost, a jeśli którykolwiek z plików przed nim potrzebny jest JUCE, masz kłopoty.

Moja początkowa nadzieja na naprawienie tego była

#undef T

przed jakimkolwiek obejmuje Boost. Ale problem polega na tym, że jeśli nie zdefiniuję go ponownie, wtedy inny kod będzie mylić, że „T” nie jest zadeklarowane.

Pomyślałem wtedy, że może mógłbym wykonać jakieś okrężne sztuczki #define, takie jak:

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

Brzydkie, ale myślałem, że to zadziała.

Niestety nie. Dostaję błędy w miejscach używających „T” jako makro

'___T___' was not declared in this scope.

Czy istnieje sposób, aby te dwie biblioteki działały razem niezawodnie?

questionAnswers(3)

yourAnswerToTheQuestion