Перевод бустовых (asio) сообщений об ошибках на естественный язык - PullRequest
0 голосов
/ 26 декабря 2018

boost::system::error_code имеет функцию преобразования в строку, которая легко дает мне что-то напечатать.К сожалению, это обычно что-то вроде «системы: 9», которая не слишком полезна.Из прочитанного источника выясняется, что числа установлены в перечислениях, поэтому я могу проверить конкретные условия, но не так легко узнать, с каким условием столкнулись.

Похоже, что передача от error_condition.value() до perror()/ strerror(), случается, работает, но я не нашел документации, в которой указано, что это гарантированоЯ пропустил это?Должен ли я быть более подозрительным?

Я подозреваю в основном потому, что не понимаю, почему строка, напечатанная operator<<(), не просто использует strerror(), если это гарантированно сработает.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Я использую что-то подобное в своих проектах, чтобы сделать отчеты об ошибках более информативными:

#include <boost/system/error_code.hpp>
#include <ostream>
#include <iostream>


struct report
{
    report(boost::system::error_code ec) : ec(ec) {}

    void operator()(std::ostream& os) const
    {
        os << ec.category().name() << " : " << ec.value() << " : " << ec.message();
    }

    boost::system::error_code ec;

    friend std::ostream& operator<<(std::ostream& os, report rep)
    {
        rep(os);
        return os;
    }
};



int main()
{
    auto ec = boost::system::error_code(EINTR, boost::system::system_category());
    std::cout << "the error is : " << report(ec) << '\n';
}

пример вывода:

the error is : system : 4 : Interrupted system call

http://coliru.stacked -crooked.com /а / 91c02689f2ca74b2

0 голосов
/ 26 декабря 2018

Вы, вероятно, должны просто использовать system::error_code::message():

void foo(boost::system::error_code ec) {
     std::cout << "foo called (" << ec.message() << ")\n";
}

Оператор << должен работать для всех категорий - это открытый дизайн, поэтому отображается только имя категории. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...