gpt4 book ai didi

c++ - 向我介绍 boost::exception

转载 作者:太空狗 更新时间:2023-10-29 20:31:09 24 4
gpt4 key购买 nike

我被要求使用 boost::exception 创建“可定制的异常框架”。到目前为止,我只使用了我定义的简单异常。所以 std::exception,boost::exception 对我来说是新的。代码如下。

#include <iterator>
#include<string>
#include <algorithm>
#include<errno.h>

struct My_exception:public virtual boost::exception
{
};

int main()
{
std::string fileName="tmp.txt";
std::string mode="r";

try
{
if(fopen(fileName.c_str(),mode.c_str()))
std::cout << " file opened " << std::endl ;
else
{
My_exception e;
e << boost::errinfo_api_function("fopen") << boost::errinfo_file_name(fileName)
<< boost::errinfo_file_open_mode(mode) << boost::errinfo_errno(errno);

throw e;
}
}
catch(My_exception e)
{
// extract the details here //
}
return 1;
}

现在,我想知道如何从捕获的异常中提取数据。谁能指导我走上 boost::exception 的道路

最佳答案

首先,你的代码有错误,比如你不能这样写:

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*。比较 version 1.40.0 errinfo_api_functionversion 1.45.0 errinfo_api_function .感谢dalle谁在评论中指出了这一点。 :-)


使用get_error_infoboost::exception 获取数据的函数模板。

看什么boost::exception文档说,

To retrieve data from a boost::exception object, use the get_error_info function template.


示例代码:

//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);

为了更好地理解,请参阅以下内容:

关于c++ - 向我介绍 boost::exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4905414/

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