我在我的代码中同时使用JUCE库和一些Boost头文件。Juce将“T”定义为宏(呻吟),而Boost经常在其模板定义中使用“T”。结果是,如果你在Boost头文件之前包含了JUCE头文件,预处理器会在Boost代码中扩展JUCE宏,然后编译器就会陷入无望的困境。
大多数情况下,保持正确的包含顺序并不难,但当你有一个JUCE类包含其他一些类,并且链上某个文件包含了Boost时,如果任何一个文件需要JUCE包含,你就会遇到麻烦。
我最初修复这个问题的希望是:
有没有一种方法可以使这两个库可靠地一起工作?
大多数情况下,保持正确的包含顺序并不难,但当你有一个JUCE类包含其他一些类,并且链上某个文件包含了Boost时,如果任何一个文件需要JUCE包含,你就会遇到麻烦。
我最初修复这个问题的希望是:
#undef T
在任何使用Boost之前,必须先定义“T”。但问题是,如果我不重新定义它,那么其他代码会混淆“T”未声明。
然后我想也许我可以使用一些循环的#define技巧,像这样:
// some includes up here
#define ___T___ T
#undef T
// include boost headers here
#define T ___T___
#undef ___T___
虽然很丑,但我认为它可能会起作用。
可惜并没有。在使用“T”作为宏时出现了错误
'___T___' was not declared in this scope.
有没有一种方法可以使这两个库可靠地一起工作?