我正在尝试创建一个将范围作为参数的宏。
我知道,这可能不是一件好事等等。
我正在尝试这个并且遇到了预处理器查找逗号和括号的问题......问题出在枚举上。
如何在作为宏参数的范围内声明枚举?
当编译器看到枚举项之间的逗号时,它将它作为分隔符。
如果你想知道我为什么进入这个,是因为我需要注册我的命名空间和类,对于命名空间我需要知道它们何时关闭,所以我想创建一个宏,最初调用一个静态函数来注册命名空间,封装其内容,最后调用从注册表中删除命名空间的静态函数。
使用宏,编码人员可以更轻松地执行此操作,并确保他不会忘记删除括号末尾的命名空间。
谢谢,
乔
编辑:
我想要一个接受范围作为参数的宏:
#define MYMACRO(unkownscope) unknownscope
class MYMACRO({
// please, don't take this code seriously, it is just an example so you can understand my question
});
现在,如果我尝试:
#define MYMACRO(unkownscope) unknownscope
class MYMACRO({
enum {
anything = 1,
everything = 2
};
});
由于枚举中的逗号,它不会编译,因为编译器认为它是宏的分隔符。括号内的逗号不会发生这种情况,例如:
int a(){
int x = anyfunction(1, 2);
}
会正常编译,因为逗号在双括号内。
很抱歉不能早点解释...我的英语不是那么好,单词一直跳过我=[
泰的答案!
乔