Size: a a a

2020 October 03

АР

Андрей Руссков... in pro.cxx
вы можете делать свои категории абсолютно точно так же, как это сделано в случае с std::errc
источник

АР

Андрей Руссков... in pro.cxx
единственное что вам нужно сделать чтобы было быстро - запихнуть свою категорию ошибок в нормальный синглтон
источник

АР

Андрей Руссков... in pro.cxx
который без локов возвращает указатель на категорию
источник

ID

In Dev in pro.cxx
Да, но они наследуются от стандартных. Отсюда и получается оверхед, как я понял
источник

АР

Андрей Руссков... in pro.cxx
ну категорию надо наследовать, да. Но наследование нужно только в одном методе - преобразования кода в текст ошибки
источник

ID

In Dev in pro.cxx
Интересно, я не выводил текст в своих тестах
источник

АР

Андрей Руссков... in pro.cxx
у вас просадка может быть в двух местах по сути:
а. error_code содержит два числа вместо одного (указатель на категорию и код ошибки), но это почти ни на что не влияет
б. у вас конвертилка error_enum -> error_code медленная потому что запрашивалка указателя на категорию медленная
источник

ID

In Dev in pro.cxx
Сильно не заморачивался и прикатил полностью реализацию из примеров буста
https://www.boost.org/doc/libs/develop/libs/outcome/doc/html/motivation/plug_error_code.html
источник

ID

In Dev in pro.cxx
static_cast<int>, казалось бы, куда быстрее :)
источник

АР

Андрей Руссков... in pro.cxx
у них чутка упрощенный пример
источник

АР

Андрей Руссков... in pro.cxx
посмотрите как сделано в asio например
источник

АР

Андрей Руссков... in pro.cxx
там в make_error_code вместо метода-синглтона Майерса (внутри которого есть фенсы) используется что-то типа:

const auto& myErrCat = GetErrorCat();

std::error_code make_error_code(ErrEnum e) {
   return {
       static_cast<int>(e),
       myErrCat // use cached reference instead of calling method with fence
   };
}
источник

АР

Андрей Руссков... in pro.cxx
возможно, если ваша error_category stateless, её конструирование можно реализовать через constexpr/constinit. Тогда синглтон конечно же будет не нужен
источник

m

magras in pro.cxx
Андрей Руссков
возможно, если ваша error_category stateless, её конструирование можно реализовать через constexpr/constinit. Тогда синглтон конечно же будет не нужен
Мне кажется сингтон все равно будет нужен, так как error_code хранит указатель на категорию, если я правильно помню.
источник

ID

In Dev in pro.cxx
Андрей Руссков
посмотрите как сделано в asio например
Звучало логично, пока я не посмотрел собственно исходник)

https://github.com/boostorg/asio/blob/develop/include/boost/asio/impl/error.ipp#L58
источник

ID

In Dev in pro.cxx
Похоже в азио все же сделано точно так, как в примерчике буста
источник

АБ

Артем Батыгин... in pro.cxx
Ребят, извините за возможный тупой вопрос, но есть кто отлично понимает двоичное кодирование и сможет объяснить?
источник

AD

Apache DOG™ in pro.cxx
источник

S

Stas in pro.cxx
Может бан за неумение чтения шапки?
источник

АР

Андрей Руссков... in pro.cxx
In Dev
Похоже в азио все же сделано точно так, как в примерчике буста
значит зря
источник