【发布时间】:2012-11-30 07:36:35
【问题描述】:
假设我们有一个像这样的宏
#define FOO(type,name) type name
我们可以像这样使用
FOO(int, int_var);
但并不总是那么简单:
FOO(std::map<int, int>, map_var); // error: macro "FOO" passed 3 arguments, but takes just 2
当然可以:
typedef std::map<int, int> map_int_int_t;
FOO(map_int_int_t, map_var); // OK
这不是很符合人体工程学。必须处理 Plus 类型的不兼容性。知道如何用宏解决这个问题吗?
【问题讨论】:
-
我猜你必须转义具有含义的字符才能使它们成为文字。
-
至少在 C++ 中,你可以将 typedef 放在任何地方,所以我不知道你为什么说它必须是“预先处理的”。
标签: c++ c macros c-preprocessor