Блин, не отпускает... Я ещё и о существовании XMACRO вспомнил.
Интересно, это юзабельно?
void FooTaskName0(unsigned int flags) { printf("From 0\n"); }
void FooTaskName1(unsigned int flags) {; }
void FooTaskName2(unsigned int flags) {; }
typedef void (*task_fun_ptr)(unsigned int flags);
typedef struct task_t{
task_fun_ptr func;
int rules;
}task_t;
#define TASKLIST \
T(FooTaskName0) \
T(FooTaskName1) \
T(FooTaskName2)
// потом использовать в функции как имя задачи
#define TASK(task) task##_enum
#define T(name) FN(name) E(name)
#define FN(name)
#define E(name) name##_enum,
enum t_itm{ TASKLIST TASKCOUNT };
#undef E
#define E(name)
#undef FN
#define FN(name) {.func=&name, .rules=0},
task_t task_collection[TASKCOUNT] = { TASKLIST };
Развернуло так:
void FooTaskName0(unsigned int flags) { printf("From 0\n"); }
void FooTaskName1(unsigned int flags) {; }
void FooTaskName2(unsigned int flags) {; }
typedef void (*task_fun_ptr)(unsigned int flags);
typedef struct task_t{
task_fun_ptr func;
int rules;
}task_t;
enum t_itm{ FooTaskName0_enum, FooTaskName1_enum, FooTaskName2_enum, TASKCOUNT };
task_t task_collection[TASKCOUNT] = { {.func=&FooTaskName0, .rules=0}, {.func=&FooTaskName1, .rules=0}, {.func=&FooTaskName2, .rules=0}, };
-
- ХЗ. Но в TASKLIST не видно запятых. Дальше не смотрел - Vit(10.12.2020 09:38)