Здравствуйте! Вопрос касается размещения полей структур в памяти. Я хочу создать функцию для поиска данных в массиве (произвольных) структур, заданных в общем виде как void*. А как задать поле для поиска? В текущем варианте я использую смещение от начала структуры в массиве и длину поля. Но это неудобно т.к. иногда поля приходиться переставляться, что приводит к трудно выводимым ошибкам глубоко в коде программы, кроме того, несколько нелогичным выглядит самому указывать размер поля и размер структуры данного типа, ведь компилятор сам знает о них в каждом конкретном случае. Может кто подскажет, как сделать правильно? Спасибо.
>Здравствуйте! Вопрос касается размещения полей структур в памяти. Я хочу создать функцию
>для поиска данных в массиве (произвольных) структур, заданных в общем виде
>как void*. А как задать поле для поиска? В текущем варианте
>я использую смещение от начала структуры в массиве и длину поля.
>Но это неудобно т.к. иногда поля приходиться переставляться, что приводит к
>трудно выводимым ошибкам глубоко в коде программы, кроме того, несколько нелогичным
>выглядит самому указывать размер поля и размер структуры данного типа, ведь
>компилятор сам знает о них в каждом конкретном случае. Может кто
>подскажет, как сделать правильно? Спасибо.Как вариант, использовать макрос offsetof .
Хороший макрос, спасибо!
Еще вариант - есть две структуры: структура фиксированного размера вида
struct NODE
{
struct NODE* next; // Следующий элемент списка. Если это массив, то ненужен
int data_type; // Тип сохраненных данных
void* data; // Указатель на сохраненные данные
}Сохраненные данные могут быть любыми. Для них есть два условия:
1. Данные должны быть такого типа, который известен и их тип помещаться в dada_type
2. Должен быть зарезервирован тип данных "ПУСТЫЕ ДАННЫЕ"При таком типе хранения довольно просто выполнять поиск, сортировку и т.п. для любых типов данных. Вобщем, это попытка на С сделать некое подмножество RTTI