[an error occurred while processing this directive]
|
Есть три глобальных типа GSTRUCT_A,B,C у которых
внутри разные структуры, но обязательно есть
члены c одинаковыми структурами - type1,type2,type3typedef struct {
type1 t1;
type2 t2;
type3 t3;
........
typeX tx;} GSTRUCT_A;
typedef struct {
type1 t1;
type2 t2;
type3 t3;
........
typeY ty;} GSTRUCT_B;
typedef struct {
type1 t1;
type2 t2;
type3 t3;
........
typeZ tz;} GSTRUCT_C;
Есть некая внутренняя функция аргументами
которой являются указатели на общие типы type1,2,3void FUNC ( type1 *t1,
type2 *t2,
type3 *t3,
)сейчас, чтобы вызывать эту процедуру для
каждого объекта приходится писать так:
FUNC(&GSTRUCT_A.t1,&GSTRUCT_A.t2,&GSTRUCT_A.t3)
FUNC(&GSTRUCT_B.t1,&GSTRUCT_B.t2,&GSTRUCT_B.t3)
FUNC(&GSTRUCT_C.t1,&GSTRUCT_C.t2,&GSTRUCT_C.t3)но в реальности общих типов больше и вызовов этой функц очень много.
На этапе написания какие то типы сейчас добавляются какие то убираются.
Каждый раз просматривать все вызовы и корректировать не очень.
возникла мысля:
обхявить функцию FUNC так:void FUNC ( int type_id,
void *type
);вызов будет таким
FUNC(STRUCT_A_ID,(void*)&GSTRUCT_A);
FUNC(STRUCT_B_ID,(void*)&GSTRUCT_B);
FUNC(STRUCT_С_ID,(void*)&GSTRUCT_С);а внутри FUNC уже создать 3 лок указателя
и выдирать type1,type2,type3 из соответсвующей памяти
по ID структуры. Преимущества вроде очевидны -
меняется только код FUNC, вызовы неменяются как при добавлении
аргументов для и при их удалении.
Вопрос:
но чего то мне это не очень нравится разыменовывать
указатель void. Или в этом ничего страшного нет?
и это растпространненная практика?