Альтернатива 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;

Не забудьте включить проверки вменяемости, хотя.

Другие вопросы по тегам