Код: Выделить всё
define(`forloop',
`pushdef(`$1',`$2')_forloop(`$1',`$2',`$3',`$4')popdef(`$1')'
)
define(`_forloop',
`$4`'ifelse($1,`$3', ,
`define(`$1',incr($1))_forloop(`$1',`$2',`$3',`$4')'
)'
)
# Synopsis: methodsContainer( type, method1, method2, ...)
define(`methodsContainer',
`
struct $1_methods_tag
{
typeof (& $1_myMethod1) myMethod1;
typeof (& $1_myMethod2) myMethod2;
forloop(`Method',1,$#,`typeof (& `$1'_$Method) $Method;')
};
')
Вот что оно выдает. Видно, что аргументы $1, $2 и т.д. не раскрыты.
Код: Выделить всё
methodsContainer(`myType',`myMethod1',`myMethod2',`myMethod3')
struct myType_methods_tag
{
typeof (& myType_myMethod1) myMethod1;
typeof (& myType_myMethod2) myMethod2;
typeof (& myType_$1) $1;typeof (& myType_$2) $2;typeof (& myType_$3) $3;typeof (& myType_$4) $4;
...................(100400 пустых строк)................
};
Пробовал выносить $Method на внешний уровень, одновременно разбивая строку в соответствующем месте. Результат не изменился.