相关疑难解决方法(0)

我可以重新定义C++宏然后再定义它吗?

我在我的代码中使用了JUCE库和一些Boost头文件.Juce将"T"定义为宏(呻吟),Boost经常在其模板定义中使用"T".结果是,如果你以某种方式在Boost头之前包含JUCE头,那么预处理器会扩展Boost代码中的JUCE宏,然后编译器就会无可救药地丢失.

在大多数情况下保持我的包含顺序并不难,但是当你有一个包含一些其他类的JUCE类时,它会变得棘手,在链上的某个地方,一个文件包含Boost,如果有任何文件在它之前需要JUCE包括你遇到麻烦.

我最初的希望是解决这个问题

#undef T
Run Code Online (Sandbox Code Playgroud)

之前任何包括Boost.但问题是,如果我不重新定义它,那么其他代码会混淆"T"未被声明.

然后我想也许我可以这样做一些循环的#define技巧:

// some includes up here
#define ___T___ T
#undef T
// include boost headers here
#define T ___T___
#undef ___T___
Run Code Online (Sandbox Code Playgroud)

丑陋,但我认为它可能有用.

可悲的是没有.我在使用"T"作为宏的地方出错

'___T___' was not declared in this scope.
Run Code Online (Sandbox Code Playgroud)

有没有办法让这两个库可靠地一起工作?

c++ macros boost c-preprocessor

40
推荐指数
3
解决办法
1万
查看次数

标签 统计

boost ×1

c++ ×1

c-preprocessor ×1

macros ×1