Вопрос

Я преобразую свои поля класс класса в одну функцию шаблона. У меня есть полевые классы для 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. Поскольку логическое значение может быть представлено текстом, это включает в себя localeS?
  3. Это зависит от этой платформы?

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

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

Это было полезно?

Решение

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

Редактировать: вы можете переключить, следует ли использовать "1"/"0" или "true"/"false с участием std::noboolalpha а также std::boolalpha.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top