2013-05-29 3 views
1

콘솔 작업을 쉽게하기 위해 문자열 연산자 역할을하는 스트림 연산자 < <을 재정의하는 객체가 있습니다.스트림을 사용하여 객체를 문자열로 변환

cout << obj << endl; 

문자열 출력과 예상되는 문자열을 비교하여 단위 테스트에서이 기능을 테스트하고 싶습니다. 현재 다음과 같이 수행합니다.

stringStream ss; 
ss << obj; 
string objStr = ss.str(); 

EXPECT_EQ(objStr, "expected string output"); 

이 내용은 특별히 읽을 수있는 것이 아니며 간결하지 않습니다. obj의 문자열 표현을 가져 오는 더 쉽고 짧고 간단한 방법이 있습니까?

답변

2

당신은 당신을 위해 일을 작은 일반 유틸리티 함수를 작성할 수 있습니다

#include <utility> 
#include <string> 
#include <sstream> 

template<typename T> 
std::string make_string(T const& o) 
{ 
    std::stringstream ss; 
    ss << o; 
    return ss.str(); 
} 

를 그리고 이런 식으로 사용

EXPECTED_EQ(make_string(obj), "expected string output"); 
+0

내 C++ 큰되지 않습니다. ss.str()의 결과는 make_string()의 스택에 할당되거나 make_string()을 호출하는 함수의 스택에 할당됩니까? –

+0

std : forward (o)가 필요합니다. ss << o를 할 수 없습니까? –

+2

@EthanHeilman :'str()'은 값으로'std :: string'을 반환합니다. 수명에 대해 걱정할 필요가 없습니다. 'std :: forward (o)'는이 경우에는 필요하지 않다. 완벽한 전달을 사용하는 것이다. *이 경우 *는'ss << o'와 같다. 방금'std :: forward '이라고 쓰여졌습니다. 나는 대답을 편집 할 것이다. –

관련 문제