| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Структура |
| Автор: kline2005 7.2.2005, 13:26 |
| Братцы, кто нибудь знает как программно (во время выполнения) создать и заполнить структуры? |
| Автор: Peter 7.2.2005, 13:40 | ||
| Непонятно, что имеется в виду. Можно написать функции, прицепить их к кнопочкам, например. В функции динамически создавать структуры и заполнять. Потом не забыть поудалять с помощью delete.
|
| Автор: kline2005 7.2.2005, 14:33 |
| Я имею ввиду именно создание структуры типа: char a = Edit1->Text = ...//тип поля char b = Edit2->Text = ...//длина поля struct { a[b]; }; и т.д.[s] |
| Автор: JackYF 8.2.2005, 00:46 |
| создавать динамически структуры, не описанные в исходнике, невозможно! Невозможно создать "то, не знаю что". |
| Автор: Peter 8.2.2005, 09:55 | ||||
Можно, по крайней мере, выкрутиться следующим образом: держать кучу памяти
и интерпретировать, допустим, первые четыре байта как размер структуры, вторые - количество полей, дальше - описание их типов, а все остальное - это данные. |
| Автор: gepard 8.2.2005, 10:28 | ||||||||||
А зачем её держать, если можно в любой момент динамически выделить? Сам же привёл пример... А по поводу дин. структур: Можно... Допустим нам надо загрузить её из файла, точнее создать из файла... Содержимое файла:
Теперь в твоей проге-анализаторе, должны быть ссылки, например:
С их помощью ты будешь хранить значения переменных. Т.е. когда прог видит надпись float my, она автоматически выделяет память под хранение значения переменной типа float в float_array. Для int'а тоже самое. Теперь, как обратиться к этой переменной? У тебя должна быть структура(в самой проге-анализаторе):
Первый аргумент - имя переменной("my"), второй - указатель на область, где храниться эта переменная. Хотя... Можно было без первых массивов... что-то я подзабыл про void*. Ну да ладно... обе реализации возможны... Когда идёт, например, присвоение переменной нового значения:
прога-анализатор должна смотерть на имя переменной и идти в соответствующую область памяти для присвоения нового значения. |
| Автор: IEZ 11.2.2005, 00:46 | ||||
Громкое заявление. kline2005 Можно попробовать на основе STL. Только тебе надо определиться составляешь ты структуру массива переменных или массив структур. А так подойдет и vector из STLя. Добавлено @ 00:48
Не удобно, нужно заранее выделять. А там динамические добавляй или удаляй. |
| Автор: bel_nikita 11.2.2005, 01:40 | ||
Никак. Сначало надо определить, а потом создавать и заполнять эти структуры. |
| Автор: IEZ 11.2.2005, 10:52 | ||
bel_nikita А зачем тогда придумали VARIANT? Вот ссылка на эту колбасню, кстати из MSDN: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/automat/htm/chap6_7zdz.asp С помощью которого можно динамически грузить переменные, типы которого ты можешь подгружать. Ну а скрестив vector с VARIANT, получается std::vector<VARIANT>, то что и требовалось в теме. А дальше уж kline2005 нужно только самому подумать где и когда это все подгружать. |
| Автор: bel_nikita 11.2.2005, 11:13 | ||||
| IEZ Приведи пример, пожалуйста:
|
| Автор: IEZ 11.2.2005, 11:40 | ||
bel_nikita Ну даже на одних векторах, что-то типа этого:
P.S. Можно правда и через класс свой забабахать. |
| Автор: bel_nikita 11.2.2005, 14:39 |
| Дык, это ясно З.Ы.: через VARIANT хотел. Хотел посмотреть, как это юзается |
| Автор: IEZ 12.2.2005, 21:41 | ||
|
| Автор: Peter 14.2.2005, 10:35 |
| Ведь функции printf, scanf и прочие с неопределенным числом параметров - они же динамически распознают типы. И тут так же сделать. |