Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
19.07.2019, 09:17
|
|||
---|---|---|---|
Пятничные наборы параметров |
|||
#18+
Продолжаем тему универсализации. Как вы храните параметры разных типов? Я тут предпринял пару попыток сделать на шаблонах хранилища для разношёрстных параметров, с переменным узбеком. Type erasure, основанное на шаблонах функций, имеет встроенный логический баг: как только мы вышли из шаблонного метода, мы навсегда теряем информацию о типе. Поэтому, принять значения довольно просто, но вот извлечь их туда, куда нужно, узнав точный тип - уже проблема. Особенно интересно: работа с БД. К примеру, я использую OLEDB, значения из него получаются в виде _variant_t, что даёт универсальность, как бы. Но вот в коде возникают проблемы, например, если мне хочется иметь быстрый доступ к этим данным и не писать много кода при этом. Проблема немного решается, если использовать операторы каста, которые проверяют тип варианта и возвращают нужную переменную. Но вот со строкой возникают проблемы, описанные с соседней теме про Cast. Cook book. Всё ещё усугубляется контейнерами. Параметры надо где-то хранить и иногда конвейерно их обрабатывать(имеется ввиду 1 record, в том-то и проблема). Если хранить в shared_ptr, то потом по коду их оттуда надо будет длинно извлекать, через [id].get().second, ибо контейнер это map, и ещё надо учитывать то, что по id ничего не нашлось в коллекции. А некоторые часто используемые параметры, хотелось бы вообще иметь в прямом доступе, без shared_ptr<>, но как это сделать, чтобы и map положить и переменную в классе использовать. Еретическое shared_ptr<>(&some), конечно, работает, но потом никак не оторвать указатель от переменной. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
19.07.2019, 09:34
|
|||
---|---|---|---|
|
|||
Пятничные наборы параметров |
|||
#18+
CEMbОсобенно интересно: работа с БД. К примеру, я использую OLEDB, значения из него получаются в виде _variant_t,прикладники испрльзуют либо EAV в бд. Либо ОРМ где на выходе типизированная коллекция контейнер, либо любой DAL где variant.AsNumber.....asString. То есть жесткая типизация и минимум неоднозначности. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=57&tablet=1&tid=2017595]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 136ms |
0 / 0 |