[英]When catching a boost::bad_lexical_cast, can I access the string/token which was to be 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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.