Is it possible to convert a boost::system::error_code to a std:error_code?

后端 未结 3 416
感情败类
感情败类 2021-01-31 10:31

I want to replace external libraries (like boost) as much as possible with their equivalents in standard C++ if they exist and it is possible, to minimize dependencies, therefor

3条回答
  •  谎友^
    谎友^ (楼主)
    2021-01-31 11:12

    Since C++-11 (std::errc), boost/system/error_code.hpp maps the same error codes to std::errc, which is defined in the system header system_error.

    You can compare both enums and they should be functionally equivalent because they both appear to be based on the POSIX standard. May require a cast.

    For example,

    namespace posix_error
        {
          enum posix_errno
          {
            success = 0,
            address_family_not_supported = EAFNOSUPPORT,
            address_in_use = EADDRINUSE,
            address_not_available = EADDRNOTAVAIL,
            already_connected = EISCONN,
            argument_list_too_long = E2BIG,
            argument_out_of_domain = EDOM,
            bad_address = EFAULT,
            bad_file_descriptor = EBADF,
            bad_message = EBADMSG,
            ....
           }
         }
    

    and std::errc

    address_family_not_supported  error condition corresponding to POSIX code EAFNOSUPPORT  
    
    address_in_use  error condition corresponding to POSIX code EADDRINUSE  
    
    address_not_available  error condition corresponding to POSIX code EADDRNOTAVAIL  
    
    already_connected  error condition corresponding to POSIX code EISCONN  
    
    argument_list_too_long  error condition corresponding to POSIX code E2BIG  
    
    argument_out_of_domain  error condition corresponding to POSIX code EDOM  
    
    bad_address  error condition corresponding to POSIX code EFAULT 
    

提交回复
热议问题