Size: a a a

2020 May 28

D

Dmitry in pro.cxx
ну, вот, уже не доверяю
источник

AY

Alexey Yunushkin in pro.cxx
#pragma pack(push, 1) ?
источник

АК

Александр Караев... in pro.cxx
Alexey Yunushkin
#pragma pack(push, 1) ?
причем тут стандарт?
источник

D

Dmitry in pro.cxx
Anatoly Shirokov
давай эмоции уберем, и в сухом остатке ты сформируешь проблему
ну уже сформулировал, вроде
есть бинарный файл, лохматых годов, известны его хедеры, форматы чанков и т.п.
все они полностью ложатся на trivially_copyable структуры, никакой магии
нужно просто с минимальным оверхедом их распарсить

у нескольких десятков источников мнения расходятся, что UB, а что нет
хотелось бы решить столь элементарную проблему, как чтение из файла

пока, из того что более-менее *по поему мнению* не UB, это читать из файла в alignas(Struct) std::array<std::byte, sizeof(Struct)>
потом мемкопить из него в Struct
источник

D

Dmitry in pro.cxx
я прав?
источник

v

vehlwn in pro.cxx
Dmitry
ну уже сформулировал, вроде
есть бинарный файл, лохматых годов, известны его хедеры, форматы чанков и т.п.
все они полностью ложатся на trivially_copyable структуры, никакой магии
нужно просто с минимальным оверхедом их распарсить

у нескольких десятков источников мнения расходятся, что UB, а что нет
хотелось бы решить столь элементарную проблему, как чтение из файла

пока, из того что более-менее *по поему мнению* не UB, это читать из файла в alignas(Struct) std::array<std::byte, sizeof(Struct)>
потом мемкопить из него в Struct
>элементарную проблему
>бинарное чтение из файлы поверх структуры
источник

AS

Anatoly Shirokov in pro.cxx
Dmitry
я прав?
struct trivial_copyable {
   ...
} o;
istream.read(std::reinterpret_cast<char*>(&a), sizeof(a)); // здесь нет UB

единственное, тебе  надо проследить за выравниванием и обеспечить гарантию, что бинарное представление элементарных типов совпадает с текущим представление на текущей платформе
источник

v

vehlwn in pro.cxx
Dmitry
ну уже сформулировал, вроде
есть бинарный файл, лохматых годов, известны его хедеры, форматы чанков и т.п.
все они полностью ложатся на trivially_copyable структуры, никакой магии
нужно просто с минимальным оверхедом их распарсить

у нескольких десятков источников мнения расходятся, что UB, а что нет
хотелось бы решить столь элементарную проблему, как чтение из файла

пока, из того что более-менее *по поему мнению* не UB, это читать из файла в alignas(Struct) std::array<std::byte, sizeof(Struct)>
потом мемкопить из него в Struct
Если известен формат файла и размеры всех полей, то бери и парси.
источник

v

vehlwn in pro.cxx
Все протоколы бинарного хранения так и работают. Жпег, пнг, зип...
источник

D

Dmitry in pro.cxx
что есть "парси"?
есть метод у ifsteam.парси()?
источник

К

Константин in pro.cxx
Dmitry
что есть "парси"?
есть метод у ifsteam.парси()?
Чего?
источник

D

Dmitry in pro.cxx
Anatoly Shirokov
struct trivial_copyable {
   ...
} o;
istream.read(std::reinterpret_cast<char*>(&a), sizeof(a)); // здесь нет UB

единственное, тебе  надо проследить за выравниванием и обеспечить гарантию, что бинарное представление элементарных типов совпадает с текущим представление на текущей платформе
спасибо, ещё одно мнение в копилку
я тоже склоняюсь, что этот вариант не UB
источник

D

Dmitry in pro.cxx
ну, мой вопрос заключается в том, *как парсить*
ответ "парси" немного не отвечает на мой вопрос
источник

AS

Anatoly Shirokov in pro.cxx
Dmitry
спасибо, ещё одно мнение в копилку
я тоже склоняюсь, что этот вариант не UB
но, хочу сказать, что этот способ десериализации  много "если" предполагает и про выравнивание, и про порядок следования байт, и про размер элементарных типов.
источник

D

Dmitry in pro.cxx
Anatoly Shirokov
но, хочу сказать, что этот способ десериализации  много "если" предполагает и про выравнивание, и про порядок следования байт, и про размер элементарных типов.
да, я это понимаю
источник

P

Pepe 🐸 in pro.cxx
Вопрос по практике, люди возвращают shared pointer или unique pointer к приватным мемберам класса, типа напрмер список нодов дерева. Нормально ли это? Мне кажется объектом должен кто-то владеть, а отдельно мемберами класса не должны владеть какие то внешние структуры, есть какие то общие гайдлайны?
источник

I

Ioann_V in pro.cxx
Pepe 🐸
Вопрос по практике, люди возвращают shared pointer или unique pointer к приватным мемберам класса, типа напрмер список нодов дерева. Нормально ли это? Мне кажется объектом должен кто-то владеть, а отдельно мемберами класса не должны владеть какие то внешние структуры, есть какие то общие гайдлайны?
Используй shared, или вовсе weak.
источник

К

Константин in pro.cxx
Dmitry
ну, мой вопрос заключается в том, *как парсить*
ответ "парси" немного не отвечает на мой вопрос
Что парсить?
источник

P

Pepe 🐸 in pro.cxx
Ioann_V
Используй shared, или вовсе weak.
ну это не важно в данном контексте. Я о том что лайфтайм не понятно кем контролируется
источник

К

Константин in pro.cxx
isrteam объект работает как cin
источник