2011-07-31 1 views
2

lexical_cast를 사용하는 템플릿 기반 코드가 있습니다.lexical_cast의 다른 약어 <T> (std :: string)

이제 모든 lexical_cast 호출을 제거하고 싶습니다 (/ clr과 잘 작동하지 않기 때문에).

std :: string과 그 값 사이에 개체를 캐스팅해야합니다.

그래서, 제 1 방향은 쉽게 (T의 _from, 표준 : : 문자열 _to)입니다 :

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

그러나 나는 (I 모든 유형의 문자열에서 일반적으로 그것을 할 수있는 방법을 생각할 수 없다 단지 atoi 같은 각 유형 및 사용 기능)에 대한 전문화를 사용할 수 없습니다 템플릿을 사용하여 작동합니다 일반적인 뭔가가 필요

편집 : 물론

내가 직접 반대에 ostringstream를 사용하여 시도했다 이온.

오류 C2784 : '표준 : : basic_istream보다는 < _Elem, _Traits> & 표준 : : 연산자 >> (표준 : : basic_istream보다는 < _Elem, _Traits> & &, _Elem *)'추론 할 수없는 나는이 오류 '표준 : : ostringstream'

답변

3

lexical_cast에서 '표준 : : basic_istream보다는 < _Elem, _Traits> & &'에 대한 템플릿 인수는 양 방향으로 <<>> 스트리밍 사용합니다. 당신은 똑같이 할 수있다 :

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

온전함 체크를 포함해야한다.

+0

물론 ...이 오류가 발생했습니다. 오류 C2784 : 'std :: basic_istream <_Elem, _Traits> & std :: operator >> (std :: basic_istream <_Elem, _Traits> &&, _ Elem *)'오류가 발생합니다. : 'std :: basic_istream <_Elem, _Traits> &&'std :: ostringstream '에서 템플릿 인수를 추론 할 수 없습니다. –

+1

@Yochai'ostringstream'을 사용하려고합니다! 물론, 이는 단지 스트리밍 입력 만 허용하는 것이 아니라 출력 스트리밍을 허용합니다. 대신'stringstream'을 사용하십시오. –

+0

롤 (Lol), 거기에 이벤트 통지를하지 않았습니다 ... 코드를 너무 오랫동안 보았습니다. 감사 –