define(`__for_each',
`ifelse(`$#', `1', `', `$#', `2', `$1(`$2')',
`$1(`$2')__for_each(`$1', shift(shift($@)))')')dnl
define(`__method_decl', `virtual $2 $1() = 0;')
define(`__expose_method', `pushdef(`method', `__method_decl')$1 popdef(`method')')dnl
define(`interface', ``struct' $1 {
__for_each(`__expose_method', shift($@))
};')dnl
interface(iface,
method(ma, int),
method(mb, void))
Я ожидаю, что скрипт выдаст вывод вроде:
struct iface {
virtual int ma() = 0; virtual void mb() = 0;
};
Но вместо virtual int ma() = 0; virtual void mb() = 0;
возвращает строку, заполненную пробелом.
Как определить макросы method
во время оценки __expose_method
, чтобы получить желаемый результат?