[an error occurred while processing this directive]
вопрос по организации данных в С
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено ы 20 сентября 2006 г. 17:49


Есть три глобальных типа GSTRUCT_A,B,C у которых
внутри разные структуры, но обязательно есть
члены c одинаковыми структурами - type1,type2,type3

typedef 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,3

void 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. Или в этом ничего страшного нет?
и это растпространненная практика?


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание