Генерация макрoобёрток, возможно ли?
От: Nick-77  
Дата: 14.09.17 15:07
Оценка:
Существует некий функционал

упрощённо так:

// put data pointer to 'data' to the stack
void *st_add(stack *st, void *data);



Соответственно в таком виде использовать сие не удобно никак.

Допустим у нас есть Mtype размером sizeof(Mtype)


// usage:
Mtype var1;
stack s;
...
st_add(&s, &var1);



Соответственно идея в том, что-бы создать обёртку (временная нужна для корректной работы с литералами и в контексте вопроса это не принципиально):

#define st_add_Mtype(st, data)\
{ Mtype _tmp_var = data;\
  st_add(&st, &_tmp_var);\
}


и тогда получается красиво:

// usage via wrapper:
Mtype var1;
stack s;
...
st_add_Mtype(s, var1);



Соответственно проблема в том, что если для базовых типов эти обёртки можно создать ручками, то для своих структурок приходится уныло копипастить и вообще всё время помнить, про особенности реализации.

Соответственно хотелось бы чего-то вроде такого:

// generate wrappers for newly defined type Mtype
st_wrapper_generate(Mtype);     // macros, which have to create auxillary for type


но реализация не позволяет в макросах создавать новые макросы. Максимум что можно, это static inline функции.

Соответственно вопрос к знатокам, можно как-то корректно и без привлечения всяких м4 решить вышеуказанную проблему?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.