Прежде всего, ваш код содержит ошибку, например, вы не можете написать это:
e << boost::errinfo_api_function("fopen")
Поскольку errinfo_api_function
может использоваться только с int
.Так что сделайте что-то вроде этого:
e << boost::errinfo_api_function(100) //say 100 is error code for api error
См. Параметр второго типа для errinfo_api_function
1 , это int
.Аналогичным образом проверьте другие шаблоны классов ошибок.Я дал ссылку на каждую из них, которую вы используете, в конце этого поста!
1.Кажется, есть две версии этого шаблона класса, одна из которых занимает int
, другая - const char*
.Сравните версия 1.40.0 errinfo_api_function с версия 1.45.0 errinfo_api_function .Спасибо dalle , который указал на это в комментарии.: -)
Используйте шаблон функции get_error_info для получения данных из boost::exception
.
Посмотрите, что boost :: exception документация гласит:
Чтобы извлечь данные из объекта boost :: exception, используйте шаблон функции get_error_info.
Пример кода:
//since second type of errinfo_file_name is std::string
std::string fileError = get_error_info<errinfo_file_name>(e);
//since second type of errinfo_errno is int
int errno = get_error_info<errinfo_errno>(e);
//since second type of errinfo_file_open_mode is std::string
std::string mode = get_error_info<errinfo_file_open_mode>(e);
//since second type of errinfo_api_function is int
int apiError = get_error_info<errinfo_api_function>(e);
См. Их для лучшего понимания: