我运行的代码在投出一系列令牌时可能会抛出boost:bad_lexical_cast
- 但我无法进入代码并且#34;将代币放在一边"所以我可以弄清楚实际失败了什么。
boost:bad_lexical_cast
是否允许您访问它试图以某种方式投射的字符串?除了关于类型名称的一些字段外,我似乎无法在其定义中找到任何内容,但可能还有我缺少的东西。
答案 0 :(得分:0)
如果您控制了调用lexical_cast的代码,那么您可以使用函数try块来捕获,包装并重新抛出具有额外信息的异常:
#include <boost/lexical_cast.hpp>
#include <string>
#include <stdexcept>
#include <exception>
struct conversion_error : std::runtime_error
{
conversion_error(const std::string& name, const std::string& value)
: std::runtime_error::runtime_error("converting " + name + " : " + value)
, name(name)
, value(value)
{}
const std::string name, value;
};
struct test
{
void bar()
{
try {
foo();
} catch(const conversion_error& e) {
std::cerr << e.what() << std::endl;
}
}
void foo()
try
{
i = boost::lexical_cast<int>(s);
}
catch(...)
{
std::throw_with_nested(conversion_error("s", s));
}
std::string s;
int i;
};
int main()
{
test a { "y", 0 };
a.bar();
}