Альтернатива lexical_cast <T>(std :: string) - PullRequest
2 голосов
/ 31 июля 2011

У меня есть шаблонный код, который использует lexical_cast.

Теперь я хочу удалить все вызовы lexical_cast (потому что он плохо работает с /clr).

Мне нужно привести объект между std :: string и их значением.

Итак, первое направление легко (T _from, std :: string _to):

std::ostringstream os;
os << _from;
_to =  os.str();

Но я не могу придумать, как сделать это в общем случае из строки в любой тип (мне нужно что-то общее, что будет работать с шаблонами, я не могу просто использовать специализации для каждого типа и использовать такие функции, как atoi)

Изменить:

Конечно, я пытался использовать острингстрим в противоположном направлении. Я получаю эту ошибку:

ошибка C2784: 'std :: basic_istream <_Elem, _Traits> & std :: operator >> (std :: basic_istream <_Elem, _Traits> &&, _ Elem *)': не удалось вывести аргумент шаблона для 'std :: basic_istream <_Elem, _Traits> && 'из' std :: ostringstream '

1 Ответ

3 голосов
/ 31 июля 2011

lexical_cast использует потоковую передачу в обоих направлениях, << и >>.Вы могли бы сделать то же самое:

std::stringstream sstr;
sstr << _from;
sstr >> _to;

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

...