Цитата(iDarkLord @ 5.4.2014, 17:14 ) | | Если я правильно понял вы предлагаете запихать этот switch в каждую функцию которая примет такие "расширенные" структуры в качестве параметра. |
Нет, конечно, только туда, где нужно обращение к дополнительным (расширенным) полям.
Цитата(iDarkLord @ 5.4.2014, 17:14 ) | | Проще наверное передавать в функцию void * ptr и там преобразовывать в тип той структуры, которой надо, но мне не нравиться этот способ. |
Без разницы. Если у Вас есть унифицированные поля и расширенные поля, то по одному только ptr Вы не можете понять, какие расширенные поля присутствуют в ptr, все равно где-то нужно хранить информацию о наличии тех или иных расширенных данных, структура это, или объединение, или их микс, или отдельная память под расширенные данные.
Если задача позволяет обойтись указателями на функции-манипуляторы со структурой, то можно их прописать в структуру и с каждым экземпляром таскать их с собой. Но проще, всё же, иметь тип расширенных данных в структуре, и уже потом согласно ему использовать switch, if или массивы функций-манипуляторов на каждый тип расширенных данных (а ля C++). |