C ++宏 - 传递为“参数”下一个单词而不是in()

时间:2011-12-24 21:25:01

标签: c++ parameters macros c-preprocessor

此代码:

#define DEREF(ptr) (*ptr)

MyClass *pClass = new MyClass;
DEREF(pClass).foo(); // equivalent of (*pClass).foo() or simply pClass->foo()

我是否可以将#define宏配置为接受ptr参数作为宏后面的单词而不是括号语句,以便我可以执行以下操作?:

DEREF pClass.foo();

2 个答案:

答案 0 :(得分:4)

不,C宏只能接收括号'()'

中的参数

答案 1 :(得分:4)

  

我可以配置#define宏来接受ptr参数作为宏

之后的单词

没有。但是,您可以编写自定义代码预处理器,在将代码传递给C ++编译器之前对其进行转换。这不是很简单或实际,但可以做到。 moc中的qt 4以这种方式运行 - 扫描自定义关键字并用编译器可以接受的C ++语句替换它们。这允许Qt 4实现其“信号/时隙”机制。