Извлечение bool из istream в шаблонную функцию - PullRequest
3 голосов
/ 22 мая 2010

Я конвертирую свои функции чтения классов полей в одну шаблонную функцию. У меня есть полевые классы для int, unsigned int, long, и unsigned long. Все они используют один и тот же метод для извлечения значения из istringstream (изменяются только типы):

template <typename Value_Type>
Value_Type Extract_Value(const std::string& input_string)
{
    std::istringstream    m_string_stream;
    m_string_stream.str(input_string);
    m_string_stream.clear();
    m_string_stream >> value;
    return;
}

Сложная часть с типом bool (Boolean). Есть много текстовых представлений для логического:
0, 1, T, F, TRUE, FALSE, и все регистро-независимые комбинации

Вот вопросы:

  1. Что говорит стандарт C ++: действительные данные для извлечения bool, используя извлечение потока оператор?
  2. Поскольку логическое значение может быть представлено как текст, это включает locale с?
  3. Зависит ли эта платформа?

Я бы хотел упростить мой код, не написав свой собственный обработчик для ввода bool.

Я использую MS Visual Studio 2008 (версия 9), C ++, Windows XP и Vista.

1 Ответ

2 голосов
/ 22 мая 2010

Строки для true и false определяются как std::numpunct::truename() и std::numpunct::falsename().Вы можете получить numpunct для данного потока с помощью use_facet <numpunct <char> >(stream.getloc()), если я правильно понимаю документацию.

РЕДАКТИРОВАТЬ: Вы можете выбрать, использовать ли "1" / "0" или "true" / "false с std::noboolalpha и std::boolalpha.

...