我正在对三个不同变量使用词法转换。现在,如果发生bad_lexical_cast异常,我必须为每个变量设置默认值。现在如何从引发异常的语句中查找?
答案 0 :(得分:2)
您可以先分配默认值,然后将每个boost::lexical_cast
包装到try-catch
块中。
或者更好地,提取一个为您执行此操作的函数:
#include <boost/lexical_cast.hpp>
#include <iostream>
template<class T, class S>
T lexical_cast_or_default(S s, T default_value) noexcept {
T value;
return boost::conversion::try_lexical_convert(s, value)
? value
: default_value
;
}
int main() {
double a = lexical_cast_or_default("abc", 3.14);
double b = lexical_cast_or_default("123", 3.14);
int c = lexical_cast_or_default<int>("456", 3.14);
std::cout << a << '\n';
std::cout << b << '\n';
std::cout << c << '\n';
}
输出:
3.14
123
456