0

我使用 Boost::Beast 并且我收到了一些异常消息,例如:解决:没有这样的主机是已知的。我想在我的代码中打印更重要的 i 消息,让一个简单的用户了解这条消息的含义。我怎么能这样做?

那是我第一次选择使用的例子,但你不适合我

 if (ec && ec != beast::errc::not_connected) {
      beast::system_error{ ec };
      std::cout << "beast::errc::not_connected" << ec << " with explanatory message " << ec.message() << std::endl;
    }
    if (ec && ec != beast::errc::no_buffer_space) {
      beast::system_error{ ec };
      std::cout << "beast::errc::no_buffer_space" << ec << " with explanatory message " << ec.message() << std::endl;

    }
    if (ec && ec != beast::errc::timed_out) {
      beast::system_error{ ec };
      std::cout << "beast::errc::timed_out" << ec << " with explanatory message " << ec.message() << std::endl;

    }
    if (ec && ec != beast::errc::no_buffer_space) {
      beast::system_error{ ec };
      std::cout << "beast::errc::no_buffer_space" << ec << " with explanatory message " << ec.message() << std::endl;

    }
    if (ec && ec != beast::errc::stream_timeout) {
      beast::system_error{ ec };
      std::cout << "beast::errc::stream_timeout" << ec << " with explanatory message " << ec.message() << std::endl;

    }
4

1 回答 1

0

正如其他人指出的那样,ec && ec != CODE需要ec && ec == CODE.

然而,这个连词是多余的:ec && ec == CODE等价于ec == CODE(除非!ec.failed())。

我认为不需要任何条件:

    if (ec) {
        std::cout << ec.message() << "\n";
    }

这只是打印任何错误的友好消息:

住在科利鲁

#include <boost/beast.hpp>
#include <iostream>
namespace beast = boost::beast;

int main() {
    for (auto code : {
             beast::errc::not_connected,
             beast::errc::no_buffer_space,
             beast::errc::timed_out,
             beast::errc::no_buffer_space,
             beast::errc::stream_timeout,
         })
    {
        boost::system::error_code ec = make_error_code(code);
        if (ec) {
            std::cout << ec.message() << "\n";
        }
    }
}

印刷

Transport endpoint is not connected
No buffer space available
Connection timed out
No buffer space available
Timer expired

问题的要点

“您的用户”不会有更友好的错误描述,因为它们将始终取决于您的程序的逻辑和域。因此,程序员有责任将任何不可恢复的错误转换为用户友好的条件。

例如,永远不会有一个有用的“最终用户”描述,no_buffer_space因为......你知道缓冲区只对程序员感兴趣。您可能会将其翻译为“超出系统负载”或“模拟太大”或“附件太大”之类的内容。

于 2021-06-05T21:07:01.763 回答