Извлечение Bool из IStream в шаблонной функции
-
04-10-2019 - |
Вопрос
Я преобразую свои поля класс класса в одну функцию шаблона. У меня есть полевые классы для 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
, и все нечувствительные комбинации
Вот вопросы:
- Что означает стандарт C ++, являются действительными данными для извлечения
bool
Используя оператор экстракции потока? - Поскольку логическое значение может быть представлено текстом, это включает в себя
locale
S? - Это зависит от этой платформы?
Я хотел бы упростить мой код, не пишев свой собственный обработчик для 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
.