使用相同名称的typedef替换预处理器宏

Sh4*_*4pe 4 c++ macros c-preprocessor

我想用一个具有相同名称的正确typedef替换宏.我有

#define FooType char*
Run Code Online (Sandbox Code Playgroud)

在第三方库中,这打破了我的一些代码(更确切地说:我被迫使用的一些代码以及我自己无法改变的代码).我想用一个同名的typedef替换它,然后#undef用宏替换它.我试过这样的事情:

#define TMP_MACRO FooType
#undef FooType
typedef TMP_MACRO FooType;
#undef TMP_MACRO
Run Code Online (Sandbox Code Playgroud)

但预处理器将其扩展为:

typedef FooType FooType;
Run Code Online (Sandbox Code Playgroud)

(至少那是g++ -E告诉我的).所以宏TMP_MACRO不会立即扩大.由于'FooType'不存在,因此无法编译.

如何FooType用适当的类型替换宏,然后取消定义宏?或者这不可能吗?

asc*_*ler 9

一个typedef声明通常是在同一行,但行号毫无意义的编译器.

typedef FooType
#undef FooType
FooType;
Run Code Online (Sandbox Code Playgroud)