bad_lexical_cast Обработка исключений в C ++ - PullRequest
0 голосов
/ 14 ноября 2018

Я использую лексическое приведение в функции для трех разных переменных. Теперь, если возникает исключение bad_lexical_cast, я должен установить значения по умолчанию, соответствующие каждой переменной. Теперь, как найти, из какого оператора выдается исключение?

1 Ответ

0 голосов
/ 14 ноября 2018

Вы можете сначала назначить значения по умолчанию, а затем обернуть каждый 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...