Действительно ли нам нужны std :: error_category и std :: error_condition?

Итак, в моем путешествии, чтобы понять, как std::error_code работает, я начинаю задаваться вопросом, действительно ли нам нужно std::error_condition а также std::error_category, Я пытаюсь реализовать то, что в этот а также этот учебник и объем работы нетривиальный, хотя он довольно хрупкий (сейчас я пытаюсь выяснить, почему этот код вызывает связывание ошибок с дублирующимися символами).

Не проще ли подкласс std::error_code, добавить message имущество & метод, а затем пусть std::error_code быть сопоставимым с перечислением, где определены коды ошибок? Я изо всех сил пытаюсь понять, почему мне нужно std::error_category а также std::error_condition совсем.

5

Решение

Основным преимуществом является то, что error_code это копируемый тип, который можно передавать из библиотеки в библиотеку без необходимости динамического выделения памяти или шаблонов, что делает его очень легким и простым в работе.

Если вы пишете полностью автономный проект, то да, коды ошибок и категории кажутся слишком сложными, когда вы можете просто иметь свой собственный тип.

Тем не менее, ситуация меняется при написании библиотеки, предназначенной для использования другими людьми (например, ASIO, так как вы связались с сайтом think-async.com). Вы можете получить библиотеку получить error_code экземпляра, и он сможет передать его чисто и эффективно, не зная ничего о коде, использующем библиотеку, или не заставляя каждую функцию обработки ошибок быть настроенной на тип ошибки.

В этом контексте категории ошибок важны при работе с несколькими источниками ошибок, поскольку данный код ошибки может означать две разные вещи в зависимости от источника ошибки.

Редактировать: Обратите внимание, в первой ссылке, как категории на самом деле одиночные. Это делается для обеспечения легкости, поскольку копирование указателя на объект, который гарантированно никогда не будет удален или изменен, является дешевым, безопасным для памяти и потокобезопасным.

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector