AlexandrY 3 30 декабря, 2019 Опубликовано 30 декабря, 2019 · Жалоба Асинхронно, но в одном потоке от разных источников (скажем узлов сети) принимаем блоки для составления из них некоторого количества разных пакетов. При приеме по заголовку блока определяем к какому пакету он принадлежит и соответственно его туда записываем после некоторых преобразований (скажем расшифровки) В шаблоне должны хранится структуры данных стэйт машин для составления пакетов. Эти структуры в начале приема создаются, а конце приема пакета удаляются. Вопрос что выбрать из шаблонов STL для этого? Чтобы идентификация "блок -> пакет" была максимально быстрой и простой, и управление массивом структур данных незамороченным. Масштабируемость тоже важна. Допустим сборка 1000 пакетов одновременно. Смотрю в SLT list - избыточный. Смотрю vector - в нем нет элементарно получения индекса после размещения с помощью push_back Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 30 декабря, 2019 Опубликовано 30 декабря, 2019 · Жалоба Может быть вам посмотреть std::map? Там как раз возможна пара "ключ"-"данные". Причём структура ключа может быть весьма нетривиальной. Правда на счёт быстродейтсвия этого контейнера не уверен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 30 декабря, 2019 Опубликовано 30 декабря, 2019 · Жалоба 37 minutes ago, haker_fox said: Может быть вам посмотреть std::map? Там как раз возможна пара "ключ"-"данные". Причём структура ключа может быть весьма нетривиальной. Правда на счёт быстродейтсвия этого контейнера не уверен. Ну да. Только этот map нужно снабдить еще своей функцией или объектом сравнения и еще своим аллокатором, и еще там итераторы на каждом шагу надо применять. Получаем клубок зависимостей на ровном месте. Легче уже взять статический массив. Одновременно ищу способ заменить классы коллекций Delphi, на которых раньше все было сделано. Поскольку напрямик в C++ builder применить дельфийские дженерики(аналоги шаблонов в С++) TList, TQueue... не удается, для этого нужно оставлять куски на Delphi. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gridinp 3 31 декабря, 2019 Опубликовано 31 декабря, 2019 · Жалоба 13 hours ago, AlexandrY said: Смотрю vector - в нем нет элементарно получения индекса после размещения с помощью push_back индекс после push_back всегда будет равен size()-1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 31 декабря, 2019 Опубликовано 31 декабря, 2019 · Жалоба 1 hour ago, gridinp said: индекс после push_back всегда будет равен size()-1 Всегда - это как понять? Под ваши личные гарантии? Шаблон использует динамическое выделение памяти, та в свою очередь делается через сервисы ОС. Т.е. везде можно ждать отказов в сервисе и исключений. Есть ли гарантия что после появления исключения в какой либо операции этого шаблона тот самый индекс останется валидным? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gridinp 3 31 декабря, 2019 Опубликовано 31 декабря, 2019 · Жалоба 21 minutes ago, AlexandrY said: Есть ли гарантия что после появления исключения в какой либо операции этого шаблона тот самый индекс останется валидным? Вы правы, нет такой гарантии, стоит ещё наверное рассмотреть случай с BSOD и kernel panic Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 31 декабря, 2019 Опубликовано 31 декабря, 2019 · Жалоба 3 minutes ago, gridinp said: Вы правы, нет такой гарантии, стоит ещё наверное рассмотреть случай с BSOD и kernel panic Нет, BSOD и kernel panic происходят в другом процессе. Я же пишу об обработке ситуаций в одном потоке. Но если серьезно, то как обстоят дела с реализацией шаблонов. Они стандартизированы на уровне сорсов или только на уровне описания интерфейса к ним? Т.е. надо ли ожидать что шаблоны в C++ Builder и в Visual Studio будут иметь разные сорсы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gridinp 3 31 декабря, 2019 Опубликовано 31 декабря, 2019 · Жалоба Да, наверное стоит ожидать, что разные исходники: https://en.wikipedia.org/wiki/Standard_Template_Library#Implementations Если хотите одинаковые исходники, может посмотреть в сторону Boost Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 31 декабря, 2019 Опубликовано 31 декабря, 2019 · Жалоба 24 minutes ago, gridinp said: Да, наверное стоит ожидать, что разные исходники: https://en.wikipedia.org/wiki/Standard_Template_Library#Implementations Если хотите одинаковые исходники, может посмотреть в сторону Boost Мда, действительно, Как может быть реализация STL быть одинаковой если сами компиляторы сильно разные. А Boost даже под builder идет в 3-х версиях! Т.е. одинаковостью и не пахнет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gridinp 3 31 декабря, 2019 Опубликовано 31 декабря, 2019 · Жалоба 22 minutes ago, AlexandrY said: А Boost даже под builder идет в 3-х версиях! Boost под всё собирается из одних исходников, его самому несложно собрать, ну версии, да разные 1.58 или там 1.71 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 31 декабря, 2019 Опубликовано 31 декабря, 2019 · Жалоба 39 minutes ago, gridinp said: Boost под всё собирается из одних исходников, его самому несложно собрать, ну версии, да разные 1.58 или там 1.71 Все программы кем-то самими в этом мире собираются из исходников. Но я ж не спрашивал как собрать мне стороннюю библиотеку и можно ли мне это сделать. Я спрашивал как не собирая библиотек и не разбираясь с их особенностями и версиями решить некий мелкий вопрос. И чтобы впоследствии мелкий вопрос решенный такими библиотеками не превратился в крупную проблему из-за необходимости сопровождения библиотек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 5 января, 2020 Опубликовано 5 января, 2020 · Жалоба On 12/30/2019 at 9:00 PM, AlexandrY said: Одновременно ищу способ заменить классы коллекций Delphi, на которых раньше все было сделано. Мне кажется, конкретно вам помочь не получится. Потому что вам надо сначала перестроить мышление и перестать сравнивать богоподобный дельфи и жалкую поделку Страуструпа, а только потом задумываться над конкретикой про контейнеры из STL. А всем остальным может помочь вот такая шпаргалка: https://habr.com/ru/company/infopulse/blog/194726/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 5 января, 2020 Опубликовано 5 января, 2020 · Жалоба 11 hours ago, esaulenka said: Мне кажется, конкретно вам помочь не получится. Потому что вам надо сначала перестроить мышление и перестать сравнивать богоподобный дельфи и жалкую поделку Страуструпа, а только потом задумываться над конкретикой про контейнеры из STL. А всем остальным может помочь вот такая шпаргалка: https://habr.com/ru/company/infopulse/blog/194726/ Мне помогать не надо. Вопрос был пятиминутный. Но просто хочу немного просвятить. Когда я писал Delphi , то имел в виду библиотеку VCL, а не язык. VCL весь смапирован на C++. Так вот VCL и STL практически не совместимы. Потому что VCL поддерживает ARC, а STL нет. В STL нельзя использовать сложные типы VCL. И STL неинвазивный, т.е. контейнеры все время копируют элементы, а это оверхед по операциям с динамической памятью. В VCL же есть все то, что имеет STL и гораздо больше. И эти вещи конечно не сравнимые. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 6 января, 2020 Опубликовано 6 января, 2020 · Жалоба 11 hours ago, AlexandrY said: Мне помогать не надо. Вопрос был пятиминутный. "STL за пять минут" - это покруче будет, чем "C++ за 21 день"! :-) 11 hours ago, AlexandrY said: Потому что VCL ... г-но мамонта, криво-косо спортированное из дельфей в C++ builder. Имхо. 11 hours ago, AlexandrY said: VCL поддерживает ARC, а STL нет Не являюсь экспертом по билдеру, но что-то мне кажется, что этот automatic reference counting - этакий std::shared_ptr, прибитый к TObject. Соответственно, std::vector из указателей на производные от TObject будет так же считать эти ссылки. 11 hours ago, AlexandrY said: контейнеры все время копируют элементы Если это критично, пользуйтесь контейнерами из указателей. Впрочем, лично у меня программы почему-то не "всё время копируют", а ещё и модифицируют данные. Там и копия как-то к месту смотрится. 11 hours ago, AlexandrY said: И эти вещи конечно не сравнимые. Искренне рад за вас, я за пять минут вещи подобной сложности полностью освоить не могу... Да что уж там, за несколько лет не могу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 7 января, 2020 Опубликовано 7 января, 2020 · Жалоба 18 часов назад, esaulenka сказал: Если это критично, пользуйтесь контейнерами из указателей. Ещё есть moving semantic, которая позволяет избежать копирования, если оно не нужно. Как обычно видим резкие категоричные выводы на фоне незнания предмета. Правильный ответ для вопрошающего: STL как и C++ в целом ему не нужен, т.к. для него конкретно бесполезен по причине незнания и неприятия оного инструмента. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться