Название: Мильён структур и типов Отправлено: OKTA от Март 31, 2014, 15:36 Товарищи, посоветуйте, как лучше сделать.
Имею библиотеку, которая выдает структуру, в которой лежит указатель на одну из 4 структур других типов, в каждой из которых лежит несколько полей данных, которые могут быть нескольких типов(около 10 разных). Принимая такие структуры, мне надо засунуть из в таблицу, но перед этим хочу создать свой контейнер для их хранения. Но проблема в том, что я могу узнать, что лежит в каждой отдельной структуре, лишь когда ее открою и так же типы данных вижу только в самый последний момент (первым полем в каждой структуре - идентификатор типа данных остальных полей). Как лучше сделать, чтобы было удобно хранить и избавить себя от миллиона явных преобразований типов? Только через шаблоны? ??? Название: Re: Мильён структур и типов Отправлено: Bepec от Март 31, 2014, 16:14 Ммм... А в чем проблема? у вас есть структура. Возьмём класс, добавим ему возможности иметь неизвестное количество полей неизвестного формата (ну ваших 10 разных). И при добавлении будет инициализировать его вашими структурами. В результате получится массив указателей на классы структур. Или указатель на главную ноду.
PS вроде бы стандартный такой древовидный подход :) PPS 1 класс для хранения и шаблонный класс для типов. Хотя хз какие у вас там типы, мб шаблон больно вычурный получится. Название: Re: Мильён структур и типов Отправлено: Old от Март 31, 2014, 16:56 2ОКТА А как вы эту древовидную структуру хотите в таблице отображать?
Название: Re: Мильён структур и типов Отправлено: OKTA от Март 31, 2014, 18:02 2ОКТА А как вы эту древовидную структуру хотите в таблице отображать? Да это не особо древовидная структура. Если грубо на словах, то опуская все тонкости имеем 4 типа контейнеров - array/range/enumeration/one_value, в каждом из которых тип данных может быть любым из встроенных типов и еще нескольких пользовательских. Т.е. каждая строка таблицы - это один контейнер. Видимо другого пути, как и советует Верес, нет - создать шаблонный класс c вложенным шаблоном (или как это сказать по-русски - nested template) для контейнеров, проинициализировать их и засунуть в массив, не забыв еще и добавить тип контейнера и тип данных в каждом контейнере. А когда будем работать с ним в интерфейсе - открываем контейнер, смотрим на его тип и тип данных и шпарим. Название: Re: Мильён структур и типов Отправлено: Old от Март 31, 2014, 18:12 Покажите на примере такой шаблонный класс.
Мне вот кажется, что все это можно положить в список контейнеров: Код
А Container это базовый класс от которого происходят контейнеры: array, range, enumeration и one_value. Название: Re: Мильён структур и типов Отправлено: Johnik от Март 31, 2014, 18:54 может union ?
Название: Re: Мильён структур и типов Отправлено: OKTA от Апрель 01, 2014, 10:23 Union не даст никаких преимуществ я думаю.
Начал так - 4 структуры и класс контейнера. Ну и дальше да, в QList их. Делать базовый класс для контейнеров пока поостерегся - у структур нет ничего общего, кроме одного поля, определяющего тип. Приму все замечания :) Код: template <class T> struct onevalue { Название: Re: Мильён структур и типов Отправлено: OKTA от Апрель 01, 2014, 11:23 Ан нет, твоя правда Old..
Надо делать класс, а в нем уже все преобразования делать - в QList так просто не подсунешь шаблонный класс. Название: Re: Мильён структур и типов Отправлено: Old от Апрель 01, 2014, 12:33 Для отображения в таблице можно придумать универсальный интерфейс, тогда никаких преобразований вообще не понадобиться.
А если возможно использовать универсальный интерфейс и для модификации, то они вообще не понадобятся. :) Название: Re: Мильён структур и типов Отправлено: OKTA от Апрель 01, 2014, 12:41 Да, я уже иду к этому ;D
Подумал, что чтобы не мучиться с хранением, буду использовать QVariant, а уже в таблице в зависимости от типа данных принимать решение, как их визуализировать :) Название: Re: Мильён структур и типов Отправлено: Old от Апрель 01, 2014, 12:46 а уже в таблице в зависимости от типа данных принимать решение, как их визуализировать :) Так это же прямой путь к 100500 switch & cast. Вроде от этого хотели уйти. :)Название: Re: Мильён структур и типов Отправлено: OKTA от Апрель 01, 2014, 12:59 В любом случае придется использовать switch + cast, чтобы сохранить данные в своих контейнерах :'(
Название: Re: Мильён структур и типов Отправлено: Old от Апрель 01, 2014, 13:07 В любом случае придется использовать switch + cast, чтобы сохранить данные в своих контейнерах :'( Ну это один раз. А так switch + cast будет в каждом втором методе.Название: Re: Мильён структур и типов Отправлено: OKTA от Апрель 01, 2014, 13:11 Попробую обмозговать вашу идею :)
Название: Re: Мильён структур и типов Отправлено: OKTA от Апрель 02, 2014, 10:35 Ешкин кот, придется убить эту идею с преобразованием и хранением данных и использовать их в исходном виде.. Выяснилось, что придется еще реализовывать задачу установки новых значений, а для этого надо, чтобы данные были в тех же формтах, в каком приходят из библиотеки. Так что проще реализовать универсальную модель и универсальный интерфейс для отображения и изменения.
Название: Re: Мильён структур и типов Отправлено: Bepec от Апрель 02, 2014, 11:39 Привели бы пару типов, я б посмотрел тоже что можно сделать. :)
PS 2 головы лучше, чем одна :) Название: Re: Мильён структур и типов Отправлено: OKTA от Апрель 02, 2014, 12:36 Ну Верес, сам напросился ;D
Буду рад новым идеям)) Вот контейнеры: Код: typedef struct { А это возможные типы: Код: typedef char TW_STR32[34], FAR *pTW_STR32; Название: Re: Мильён структур и типов Отправлено: Igors от Апрель 02, 2014, 12:53 Вот контейнеры: Можно заменить это вектором (или его наследником), а вход/выход сделать как I/O, может и через операторы >> << Код: typedef struct { |