|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
Нужен динамический контейнер, который будет соединять разные переменные, разных типов в блоки02.01.2014, 19:05. Показов 4276. Ответов 21
Метки нет (Все метки)
В общем нужен динамический контейнер... который будет соединять разные переменные, разных типов в блоки.
Например есть поля Edit и Combo, после нажатия на кнопку, информация из заполненных полей будет помещяться в блок, расширение блоков нужно чтоб было примерно как в структуре, через операторы new и delete переопределять и копировать информацию. Проблема в том что структура, на сколько мне известно не может держать в себе переменное кол-во членов(которое изменяется во время работы программы), т.е. мне наприпер в одном блоке нужно 4 char массива по 20 символов и один 300 символов, ещё туда же 2 int переменные и HWND например. Как осуществить такую сложную динамику, и возможно ли объединять в структурные блоки переменные, которые могут позже удаляться например из блока или создавать новые в нутри одного блока (блок в моём понимании как строка из элементов ListView формы). Возможно ли работать с структурой в таком режиме, если да то как? И по возможности, прошу высказывать самые простые способы(т.е. например не такие сложные в синтаксисе как классы), идеальным для меня вариантом было бы использование структур(возможно вложенных или "дружественных")
0
|
|
| 02.01.2014, 19:05 | |
|
Ответы с готовыми решениями:
21
Статический контейнер для разных типов Показать разные блоки для разных устройств Разделение строки на переменные разных типов |
|
Ушел с форума
|
|
| 02.01.2014, 19:14 | |
|
Интересная задачка. Вряд ли можно на C++ такое сделать, статическая типизация ведь.
А как Вы видите себе использование такого контейнера ? Можно пример (псевдо)кода ?
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 02.01.2014, 19:21 | |
|
Для безымянных экземпляров классов типизация смешанная: статически типизируется иерархия и динамически фактический класс.
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|||||||
| 02.01.2014, 19:40 [ТС] | |||||||
|
Я думаю, изначально создать с десяток структур по каждому виду переменной в структуре, например для int:
Теперь далее, т.к. структура не поддерживает динамические массивы как члены, то в структуре, описывающюю какой либо объект, хранить число как кол-во членов в ней, а так же типы этих членов как "typedef enum" тип, на основе которого будет программа расфосовывать переменные. На основе этой структуры(объекта), создавать новую основанную на кол-ве членов и их типах, в этой структуре возможно переменные определять с помощью указателей(или даже просто числа, т.к. важен порядковый номер в базовой структуре, через который можно обратиться за данными) на переменные, хранящиеся в interegs и т.п. структурах. Однако это лишь часть моей задумки, динамическое кол-во членов всё равно не сможет поддерживаться структурой, придётся возможно создавать структуры основанные на числе его членов как статическом, например для объектов будет 3 структуры по 5, 10 и 20 членов(как один массив внутри структуры), иначе если брать слишком много - будет утечка памяти в итоге, т.к. если мне нужна структура на 3 эл., а статически массив выделяется в структуре на 20 эл-во, а они так и не будут использованны, другое дело от 2 до 7 эл-ов... Хотя мне так не нравится, код будет не красивым, желанной динамики не будет... П.С. кстати, а можно ли узнать сколько памяти съела структура?.. например "N=20; na=new integers[N];" Добавлено через 9 минут Простым языком пожалуйста, и если можно с примером реализации. И опять же, я не хотел использовать классы, но если вариантов больше нет, то придётся... Однако мне нужен пруф, что без классов и т.п. мути типа векторов, работу с которыми вразумить тяжело... Читабиельность кода падает в разы.
0
|
|||||||
|
Ушел с форума
|
||
| 02.01.2014, 20:05 | ||
|
А вообще, мне сразу вспоминается тип VARIANT из COM: VARIANT structure http://msdn.microsoft.com/en-u... 85%29.aspx Наглядный пример структуры, которая умеет хранить множество типов... А вот советую еще заглянуть сюда, может убережет от написания очередного велосипеда: Boost.Any http://www.boost.org/doc/libs/... l/any.html
1
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 03.01.2014, 00:25 [ТС] | |
|
VARIANT - Чтобы хранить одну структуру, смешанного типа ?
Вообще я использую VARIANT для работы с Auto Excel, но обрабатывать все возможные типы возвращяемые VARIANT функциями не считаю нужным... Да и проблема с типами меня мало тревожит, по сравнению с задачей по динамическому изменению кол-ва членов у объектов..
0
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||||||
| 03.01.2014, 10:07 | |||||||
0
|
|||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 03.01.2014, 14:12 [ТС] | |
|
taras atavin, что это? Как это использовать?... Как это решает задачу с динамическим изменением кол-ва членов по ходу работы программы?
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||||
| 05.01.2014, 17:29 [ТС] | ||||||
|
Раз пока что адекватного выхода из первоначального вопроса не найдено, то думаю что обойдусь отдельной переменной в структуре, которая будет отвечать за номер блока, если он нужен.
Кстати столкнулся с небольшими трудностями: 1. Типа HWND в VARIANT структуре нет, где то на задворках яндекса что то невнятное говорили на английском, мол HWND можно считать как Long тип, хотя не понятно как обращяться с этим тогда. 2. Как сделать Нное кол-во массивов структур(хотя написал видимо не корректно). Поясню:
3. Тут же ещё одна неприятность, даже если я добавлю новую переменную в структуру, исходя из его типа мне нужно присвоить ему значение, т.е. для int - цыфру, для char - массив символов и т.п. Как заделать в структуре подобное? Я пока что не придумал(потому впихнул просто "char zn[20];", который можно методом atoi конвертировать, хотя 19 символов мне кажется не всегда будет достаточно), хотя начитал в интернете, что можно пользоваться неопределённым типом в указателях, например void *p; А потом уже присваивать тип ему и добавлять данные. ( но опять же, указатели не переменные, могут и потерятся, а если использовать доп. указатели, то может быть overhead адресации...
0
|
||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||
| 10.01.2014, 09:22 | ||
|
Добавлено через 35 секунд Izual, есть в бусте классы boost::any/boost::variant. Есть подобное и в Qt.
0
|
||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 10.01.2014, 16:05 [ТС] | |
|
Суть задачи состоит в динамическом распределении переменных в динамическом двумерном массиве структур. Тип и значение которые возвращяет Variant лишь 1 из переменных измеряемой единицы, ещё нужно удобное обращение к переменным, т.е. их структуризация, при этом такое же лёгкое как в структуре, где всего 1 тип соединительного символа(точка).
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 10.01.2014, 17:37 | |
|
Izual, если все типы заведомо известны - можно попробовать union. Но тут другая загвоздка - для обращения к элементу union'а нужно заранее знать его тип. Короче говоря, универсального решения данной задачи в статически типизируемом языке вряд ли удастся добиться.
Добавлено через 51 секунду Или погодите, у меня почему-то создаётся ощущение, что я неверно понял задачу...
0
|
|
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 10.01.2014, 18:11 [ТС] | |
|
Вы верно поняли, мне нужно создавать в блоки "двумерных массивов" переменные разных типов, например: создать таблицу, введите кол-во строк и столбцов, выберите типы данных в колонках, введите значения.
При этом я например хочу, чтоб в процессе работы я мог изменить тип в какой то колонке... Для этого я предполагаю, что если бы структура поддерживала динамические массивы типа: int mk[][];, но так к сожалению нельзя сделать... Потому проще использовать простые массивы, а их по доп. переменной уже сортировать(находить) среди структуры, содержащей все созданные\загруженные перменные. Т.е. в конечном итоге это будет что то типа интерпритатора к собственным файлам параметров.
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|||
| 11.01.2014, 11:29 | |||
|
0
|
|||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 11.01.2014, 17:20 [ТС] | |
|
мне придётся так делать, почему с самого начала я вообще хотел несколько структур, содержащих либо char buf[50] либо int zn как значение любой переменной.
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||||
| 11.01.2014, 22:49 | ||||||||
0
|
||||||||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
|
| 12.01.2014, 04:48 [ТС] | |
|
1. Ну я создал допустим fn *foo, через new например с 20 элементами. А как же я даже имея такую структуру смогу контролировать не только кол-во строк(кол-во эл.), но и кол-во столбцов(т.е. кол-во arr элементов, как например arr[10])?...
2. Задачки на динамику, после целого года работы над программой в WinApi (создаю собственну базу данных с связью авто экселя и парсинга), подумалось что надоело руками писать код постоянно один и тот же, только лишь меняя название массивов и др. перменных. Захотелось попробовать реализовать способ программирования через блок схемы с интерфейсом, это бы сильно упростило труд.
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|||
| 12.01.2014, 14:29 | |||
|
Не подумайте, я не издеваюсь, просто хочется понять проблему в той мере, чтобы её можно было попытаться решить. Давайте так. Чтобы понять, зачем вам реализация обобщённых таблиц, мне не нужно знать полностью постановку вашей задачи. Мне нужно знать только постановку подзадачи, т.е. только той части, которая связана с использованием обобщённых таблиц в коде. Опишите, что бы вы хотели получить, как бы хотели работать с такими обобщёнными таблицами (можно написать пример на псевдокоде с С++-подобным синтаксисом, например).
0
|
|||
|
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
|
||||||||||||
| 12.01.2014, 18:48 [ТС] | ||||||||||||
|
1. Про векторы я вообще ничё не знаю, потому стандартный или нет - мне по фене
Мне главное услышать или увидеть что моя задача по : "Динамическому заданию кол-ва строк и столбцов, а так же типов в них(на основе колонок)" может быть решаема не простыми массивами, а структурированнми данными.Кол-во строк и столбцов вводимая\читаемая информация, так же как типы данных в них(например захочу в 2 колонке тип WORD, а в 5 - string, при этом было бы хорошо потом в процессе работы чтоб можно тоже было поменять. Обычными структурами я хранил данные статичных типов и кол-ва столбцов(согласно кол-ву пременных структуры), а вот кол-во строк можно было изменить:
Тут плотная привязка к кол-ву переменных в структуре, я могу сделать:
Если вектор может дать нужные мне возможности, то если есть кусочек кода что ли с примером обращения к таким членам и их использовании в конвертировании, я был бы рад его увидеть - для наглядности. Добавлено через 6 минут П.С.
0
|
||||||||||||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
||||||||||||||||||
| 13.01.2014, 06:55 | ||||||||||||||||||
|
Вот пример работы с вектором (заполнение и вывод на экран двумерной матрицы с динамическим добавлением элементов в вектор)
В этом случае для такой матрицы уже не нужно использовать оператор push_bakc (вся нужная память уже выделена), а работать с ней необходимо сразу через индексацию. Вывод не будет отличаться от приведённого в коде выше, а вот заполнение уже нужно выполнять так:
Векторы позволят вам решить эту проблему:
0
|
||||||||||||||||||
| 13.01.2014, 06:55 | |
|
Помогаю со студенческими работами здесь
20
Объявить переменные разных типов в заголовке for Массив включающий переменные разных типов
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|