2015-01-23 8 views
3

나는 to_string이 templatized이고 후드 아래 stringstream을 사용했다고 생각했습니다.to_string Templatized가 아닌 이유는 무엇입니까?

그렇지 않습니까?

class foo{}; 

ostream& operator<<(ostream& os, const foo& /*bar*/){ 
    os << "foo"; 
    return os; 
} 

int main() { 
    foo bar; 
    string tsTest = to_string(bar); 

    return 0; 
} 

을하지만 분명히 그 플릿되지 to_string 원인 작동하지 않습니다

나는이 작업을 수행 할 수 있어야합니다.

+0

'foo' 네임 스페이스에서'to_string' 오버로드를 정의한 다음'using '을 통해 네임 스페이스를 가져 오는 것은 어떻습니까? 해당 코드 스 니펫에서 ostream의 필요성은 무엇입니까? – peppe

+2

'std :: stringstream'은 변환하는 데 가장 효율적인 방법이 아니므로 템플릿이없는 이유입니다. 따라서 각 오버로드가보다 효율적인 함수를 사용합니까? – Galik

+0

@peppe 코드 스 니핏에서'operator <<'의 필요성은'to_string'이 "stringstream"을 사용하여 "foo"를 삽입하도록 허용하는 것으로 생각했습니다. 그 질문에 거짓말을하는 이유는'to_string'이'stringstream'을 사용하지 않는 이유는 무엇입니까? –

답변

3

아니요, to_string은 어떤 유형도 아닙니다. 프리미티브 표준 유형에는 오버로드 만 있습니다. 불행히도 boost::lexical_cast을 대신 할 수 없습니다.

+0

다가오는 TS에서 씻지 않은 대중에게'boost :: lexical_cast'를 사용할 수 있습니까? –

+1

@ 조나단 미 (JonathanMee) : 적어도 어느 시점에서 [TR2를 위해 제안되었습니다] (http://stackoverflow.com/q/8065413/560648). –