![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
iDarkLord |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 4.4.2014 Репутация: нет Всего: нет |
Есть более или менее однотипные данные хранящиеся в буфере, хочется оформить их в виде структуры, но длина этих данных и набор полей отличаются, но у всех у них есть общие черты. Как сделать так, что бы структуры как бы наследовались друг от друга. Все это должно быть на чистом Си. Т.е. если бы это был С++ я бы сделал это через наследуемые классы, а в прототип функции писал бы самый высокий в иерархии класс, но как реализовать подобное в Си ?
Если структуры для этого не подходят, то что лучше использовать ? |
|||
|
||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Конечно, это не наследование, одна видимость, но работать можно:
Это сообщение отредактировал(а) feodorv - 4.4.2014, 15:22 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 1 Всего: 146 |
use union ...
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
iDarkLord |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 4.4.2014 Репутация: нет Всего: нет |
Если я правильно понял вы предлагаете запихать этот switch в каждую функцию которая примет такие "расширенные" структуры в качестве параметра. Как то это через чур =). Проще наверное передавать в функцию void * ptr и там преобразовывать в тип той структуры, которой надо, но мне не нравиться этот способ. Use your brain, luke ! |
|||
|
||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Нет, конечно, только туда, где нужно обращение к дополнительным (расширенным) полям.
Без разницы. Если у Вас есть унифицированные поля и расширенные поля, то по одному только ptr Вы не можете понять, какие расширенные поля присутствуют в ptr, все равно где-то нужно хранить информацию о наличии тех или иных расширенных данных, структура это, или объединение, или их микс, или отдельная память под расширенные данные. Если задача позволяет обойтись указателями на функции-манипуляторы со структурой, то можно их прописать в структуру и с каждым экземпляром таскать их с собой. Но проще, всё же, иметь тип расширенных данных в структуре, и уже потом согласно ему использовать switch, if или массивы функций-манипуляторов на каждый тип расширенных данных (а ля C++). -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
С чего такая реакция? Romikgy, совершенно справедливо предложил тебе не самое худшее (если не сказать лучшее) решение. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |