Кресты / Говнокод #25225 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
template<class T, class U> bool convertStrToInt(const char* str, int base, T &res, T def, U (*strto)(const char *, char **, int ))
{
    char *endptr = NULL;
    errno = 0;//man wants it
    if ( ! str || *str == '\0' )
    {
        res = def;
        return false;
    }
    U result =  strto(str, &endptr, base);
    if (errno == ERANGE || (*endptr != '\0') || ! *str) {
        std::stringstream errorStr;
        errorStr << "convertStrToInt failed ; string = '" << str << "' result ='" << result << "' endptr = '" << endptr << "' errno = '" << errno << "'";
        res = def;
        log_error("%s", errorStr.str().c_str());
        return false;
    }
    res = static_cast<T>(result);
    return true;
}

Преобразование строки в число

Запостил: patzantre patzantre, (Updated )

Комментарии (6) RSS

  • Чего хочет мужчина? errno = 0;

    Короче, вспомогательная функция, которая логирует ошибки формата.
    Ответить
  • Совсем некрестово. Почему str с жестко заданным типом? Почему вместо божественного std::function<U(TT, TTT, int)> какая-то сишная питушня? Где SFINAE, в конце-концов?!
    Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8