Size: a a a

cxx.Дискуссионная

2020 April 23

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
но речь не о сериализации, а о десериализации
источник

RM

Roy Mustang in cxx.Дискуссионная
Не прокатит какой нибудь лайфхак с перегрузкой сделать в constexpr и через перегрузку тип определять в вариантах?
источник

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
какой ещё перегрузой, если ты с диска данные читаешь, и видишь, что у тебя в variant идёт тип#3 и данные к нему?
источник

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
чтение в рантайме происходит
источник

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
а не во время компиляции
источник

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
вот читешь std::variant<Foo, Bar, Buz, EnterpriseBus>
источник

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
на диске будет либо
0[Foo]
1[Bar]
2[Buz]
3[EnterpriseBus]
источник

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
прочитал первый токен, index, он 2
источник

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
нужно позвать дальше читалку Buz
источник

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
если бы там было 3, то читалку для EnterpriseBus
источник

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
Вот речь о том, чтобы не руками свитчи писать, а чтобы компилятор всю эту рутину по максимуму на себя взял
источник

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
и дальше о том, чтоб не свои костыли перетаскивать, а стандартизировать это, ибо не очень редкий кейс, легко обобщается
источник

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
/dev/urandon ¯\_(ツ)_/¯
Вот речь о том, чтобы не руками свитчи писать, а чтобы компилятор всю эту рутину по максимуму на себя взял
потому что если руками начнёшь свитчи писать, то это станет источником большого геморроя и багов
источник

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
в один день поменял тип на std::variant<Foo, Bar, Buz, EnterpriseBus, LegacyShit>, а в читалке забыл — и привет баги
источник

RM

Roy Mustang in cxx.Дискуссионная
Если индексы последовательно идут, то почему бы не использовать вектор или хеш карту? Там же и так придется читалку самому писать
источник

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
Roy Mustang
Если индексы последовательно идут, то почему бы не использовать вектор или хеш карту? Там же и так придется читалку самому писать
я std::array для этого с коллбеками-инстансами функтора создавал, при этом это в одну строчку через folding expressions получается
источник

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
у Саши то же самое, насколько я понял, в runtime_unroll написано
источник

RM

Roy Mustang in cxx.Дискуссионная
По сути можно обойтись одной хеш картой (если индексы могут хаотично идти) или вектор если последовательно все идет. Учитывая что читалка не меняется, то написать остается только callback под каждый тип
источник

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
Roy Mustang
По сути можно обойтись одной хеш картой (если индексы могут хаотично идти) или вектор если последовательно все идет. Учитывая что читалка не меняется, то написать остается только callback под каждый тип
если последовательно и размер известен, то static std::array, а не вектор
источник

RM

Roy Mustang in cxx.Дискуссионная
/dev/urandon ¯\_(ツ)_/¯
если последовательно и размер известен, то static std::array, а не вектор
а как быть с тем, что индекс может быть какой то пуст?
источник