我正在运行的代码可能会boost:bad_lexical_cast
在投射一系列标记时抛出 - 但我无法进入代码并“将标记放在一边”,因此我可以找出实际失败的投射。
是否boost:bad_lexical_cast
让您访问它试图以某种方式强制转换的字符串?除了一些关于类型名称的字段外,我似乎在它的定义中找不到任何东西,但也许我缺少一些东西。
我正在运行的代码可能会boost:bad_lexical_cast
在投射一系列标记时抛出 - 但我无法进入代码并“将标记放在一边”,因此我可以找出实际失败的投射。
是否boost:bad_lexical_cast
让您访问它试图以某种方式强制转换的字符串?除了一些关于类型名称的字段外,我似乎在它的定义中找不到任何东西,但也许我缺少一些东西。
如果您可以控制调用 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();
}