Альтернатива lexical_cast<T>(std:: string)
У меня есть шаблонный код, который использует lexical_cast.
Теперь я хочу удалить все вызовы lexical_cast (потому что он плохо работает с /clr).
Мне нужно привести объект между std:: string и их значением.
Итак, первое направление легко (T _from, std::string _to):
std::ostringstream os;
os << _from;
_to = os.str();
Но я не могу придумать способ сделать это в общем случае из строки в любой тип (мне нужно что-то общее, которое будет работать с шаблонами, не может просто использовать специализации для каждого типа и использовать такие функции, как atoi
)
Редактировать:
Конечно, я пытался использовать поток Ostring в противоположном направлении. Я получаю эту ошибку:
ошибка C2784: 'std:: basic_istream<_Elem, _Traits> & std:: operator >> (std:: basic_istream<_Elem, _Traits> &&, _ Elem *)': не удалось вывести аргумент шаблона для 'std:: basic_istream<_Elem, _Traits> && 'из' std:: ostringstream '
1 ответ
lexical_cast
использует потоковую передачу в обоих направлениях, <<
а также >>
, Вы можете сделать то же самое:
std::stringstream sstr;
sstr << _from;
sstr >> _to;
Не забудьте включить проверки вменяемости, хотя.