gpt4 book ai didi

c++ - 如何正确使用boost::error_info?

转载 作者:可可西里 更新时间:2023-11-01 14:56:08 30 4
gpt4 key购买 nike

我正在尝试遵循此页面上的示例:

http://www.boost.org/doc/libs/1_40_0/libs/exception/doc/motivation.html

我尝试以下行的那一刻:

throw file_read_error() << errno_code(errno);

我得到一个错误:

error C2440: '<function-style-cast>' : cannot convert from 'int' to 'errno_code'

我如何让它工作?

理想情况下,我想创建这样的东西:

typedef boost::error_info<struct tag_HRESULTErrorInfo, HRESULT> HRESULTErrorInfo;

但我什至无法让第一个示例起作用。

编辑:这是为我生成错误 C2440 的简要示例:

struct exception_base: virtual std::exception, virtual boost::exception { };
struct io_error: virtual exception_base { };
struct file_read_error: virtual io_error { };

typedef boost::error_info<struct tag_errno_code,int> errno_code;

void foo()
{
// error C2440: '<function-style-cast>' : cannot convert from 'int' to 'errno_code'
throw file_read_error() << errno_code(errno);
}

最佳答案

#include <boost/exception/all.hpp>

#include <boost/throw_exception.hpp>

#include <iostream>
#include <stdexcept>
#include <string>

typedef boost::error_info<struct my_tag,std::string> my_tag_error_info;

int
main()
{
try {
boost::throw_exception(
boost::enable_error_info( std::runtime_error( "some error" ) )
<< my_tag_error_info("my extra info")
);
} catch ( const std::exception& e ) {
std::cerr << e.what() << std::endl;
if ( std::string const * extra = boost::get_error_info<my_tag_error_info>(e) ) {
std::cout << *extra << std::endl;
}
}
}

产生

samm@macmini> ./a.out 
some error
my extra info

关于c++ - 如何正确使用boost::error_info?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3782174/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com