Макрос C ++ - передать в качестве «параметра» следующее слово вместо in () - PullRequest
1 голос
/ 25 декабря 2011

Этот код:

#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 ]

4 голосов
/ 25 декабря 2011

Можно ли настроить макрос #define для принятия параметра ptr в качестве слова, следующего за макросом

Нет. Однако вы можете написать собственный препроцессор кода, который преобразует ваш код перед передачей его компилятору C ++. Это не очень просто и не практично, но можно сделать. moc in qt 4 работает следующим образом - ищет пользовательские ключевые слова и заменяет их на операторы C ++, которые может принимать компилятор. Это позволяет Qt 4 реализовать свой механизм «сигнал / слот».

4 голосов
/ 25 декабря 2011

Нет, макросы C могут получать параметры только в скобках '()'

...