我正在尝试创建一个将作用域作为参数的宏。
我知道,这可能不是一件好事等。等
我试图这样做,并得到了预处理器查找逗号和括号的问题......问题与枚举。作为宏的参数的作用域内的枚举声明
我该如何在作为宏参数的范围内声明一个枚举?
当编译器在enum itens之间看到逗号时,它将它作为分隔符。
如果你很想知道我为什么进入这个目录,是因为我需要注册我的命名空间和类,对于我需要知道它们何时关闭的命名空间,所以我正在考虑创建一个最初调用静态函数,用于注册名称空间,封装其内容并最终调用静态函数,该函数从注册表中删除名称空间。
使用宏,编码器可以更容易地执行此操作,并确保他不会忘记删除括号末尾的名称空间。
谢谢,
乔
编辑:
我想接受一个范围作为参数的宏:
#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
};
});
它不会因为enum内部的逗号而编译,因为co mpiler认为它是宏的分隔符。例如:
int a(){
int x = anyfunction(1, 2);
}
会因为逗号在双括号内而正常编译。
对不起,不能够解释前面......我的英语不是太好的字样只是不停地跳跃我= [
泰的答案!
Joe
你能确定你是什么意思的范围是什么?举一些例子? –
请发布您的尝试... –
如何注册命名空间? – jmucchiello