Это своего рода злоупотребление CPP, но распространенный тип злоупотребления.Я справляюсь с подобными ситуациями, определяя фиктивные макросы
#define FUNCTIONS \
foo(a,b,c,d) \
foo(a,b,c,d) \
foo(a,b,c,d)
now,
#define foo(a,b,c,d) \
a+b ;
FUNCTIONS
#undef foo
позже, когда вы хотите сделать что-то другое с тем же списком
#define foo(a,b,c,d) \
a: c+d ;
FUNCTIONS
#undef foo
Это немного уродливо и громоздко, но работает.