На 22:55 Антон упоминает, что из std::exception "можно стектрейс вытащить иногда". Что он имеет в виду? Какую-то конкретную реализацию стандартной либы?
Можно либо запатчить C++ runtime, если вы полностью контролируете платформу. Либо вы, зная имя своего базового класса с стектрейсом, можете делать dynamic_cast для пойманного исключения. Если dynamic_cast успешный - достаёте трейс.
Так он же привёл пример и на 34:45 он рассказал о минусах. Плюс будут сложности, если в T будет шаблон, а не тип. Поэтому он предлагает работать с T в отдельной структуре и передавать её параметром, с которым удобнее работать на примере 39:34 . Плюс на 38:07 он объясняет, зачем заключать эту вспомогательную структуру в namespace.
@@matwey.kornilov Да, поэтому Антон привёл пару примеров как с этим бороться: завести какой-то списочек различных значений этих констант для различных платформ; или выбрать максимальные среди всех вариантов значения, если можно пренебречь лишними 8Б
FastPimpl - шикарно!
Как всегда топ информация. Спасибо!
38:03. std::type_identity или boost::type_identity
Как обычно пачкой выплёвывается миллион видео. Но начинаю всегда с Полухина.
А модули случайно из c++ 20 не помогут убрать проблему с фастпимпл? они же скроют все кишки что не экспорт?
+
Тем временем модули всё ещё сырые.
На 22:55 Антон упоминает, что из std::exception "можно стектрейс вытащить иногда". Что он имеет в виду? Какую-то конкретную реализацию стандартной либы?
Можно либо запатчить C++ runtime, если вы полностью контролируете платформу.
Либо вы, зная имя своего базового класса с стектрейсом, можете делать dynamic_cast для пойманного исключения. Если dynamic_cast успешный - достаёте трейс.
return Parse< T >( *this ); нельзя было написать?
Так он же привёл пример и на 34:45 он рассказал о минусах. Плюс будут сложности, если в T будет шаблон, а не тип. Поэтому он предлагает работать с T в отдельной структуре и передавать её параметром, с которым удобнее работать на примере 39:34 . Плюс на 38:07 он объясняет, зачем заключать эту вспомогательную структуру в namespace.
Но ведь на разных архитектурах для одного и того же типа могут быть разные значения sizeof(T) и alignof(T).
#ifdef MY_ARCH size = 64, align=16
@@vladshut8576 Ну это не плюс языка, когда придется для каждой платформы (архитектуры, компилятора, его версии) перечислять длинную простыню макросов.
@@matwey.kornilov Да, поэтому Антон привёл пару примеров как с этим бороться: завести какой-то списочек различных значений этих констант для различных платформ; или выбрать максимальные среди всех вариантов значения, если можно пренебречь лишними 8Б