bad_lexical_cast c ++

时间:2018-11-14 09:13:34

标签: c++11

我正在对三个不同变量使用词法转换。现在,如果发生bad_lexical_cast异常,我必须为每个变量设置默认值。现在如何从引发异常的语句中查找?

1 个答案:

答案 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