2013-10-12 2 views
0

"Essential C++"(특히 2.7 부)의 책에서 저자는 템플릿 메시지의 사용법을 진단 메시지를 표시 한 후 다음 요소를 통해 반복적으로 설명합니다. 벡터템플릿 함수의 ostream 기본 매개 변수

template <typename T> 
void display_message(const string& msg, const vector<T>& vec) 
{ 
    cout << msg; 

    for (int i = 0; i < vec.size(); ++i) 
     cout << vec[i] << ' '; 
} 

그래서,이 예제는 항상 부여 대부분의 응용 프로그램에, 표준 입력/출력 스트림을 통신에 사용되는 것을 위해 촬영 한 (아마, 다른 많은 아마추어 개발자로) 내가 때문에, 나에게 관심을 가지고 데이터 처리. 그런 다음 저자는 display_message를 구현하는이 방법이보다 유연하다는 점을 언급합니다. 이 유연성이 "빛나"는 상황의 예를 들어 줄 수 있습니까? 즉, 선택적 제 3 매개 변수가 다른 입출력 표현 (예 : 임베디드 장치)을 취하는 경우 또는 극단 대신 간단한 구성으로 사용되는 간단한 추가 일뿐입니다 설명하려고하는 상황?

편집 : @Matteo 이탈리아가 발견,이 당신은이 기능에서 사용할 수있는 두 개의 "유연성"을 혼동 함수 선언

void display_message(const string&, const vector<T>&, ostream& = cout); 
+0

세 번째 인수는 컴파일되지 않지만 의미가 없습니다. 그런 식으로 작성 되었습니까? 'ostream & os = cout'과 같지 않은가? 그리고 나머지 함수 본문에서는'cout' 대신'os'를 사용합니까? –

+0

아, 그래! 내 잘못이야. 나는 함수 선언을 제시했다. 당신 말이 맞아요. – TheSOFan

+0

어, 이제 정의가 해제되었습니다 ... 세 번째 매개 변수가 누락되었습니다. –

답변

0

입니다. (필자는 저자가 이야기하는 하나라고 생각)

  • 템플릿 부분은 당신이 어떤 std::vector<T>T 스트림에 출력 할 수 주어진 전달할 수 있습니다; 즉, 정수, 복식 또는 심지어 사용자 지정 개체의 벡터를 전달할 수 있으며 함수는 지정된 스트림에서 행복하게 출력합니다. 1

  • 스트림 부분은 (당신의 관심을 끌었하는) 당신은 출력 부분에 대한 (좁은) 출력 스트림을 지정할 수 있도록 대신입니다 다른 스트림에서 메시지 (및 벡터)를 출력 할 수 있으므로 유용합니다. 예를 들어 오류 메시지 인 경우 cerr; 가장 중요한 것은 파일에 쓰는 경우 파일 스트림을 전달한다는 것입니다.


참고 인터페이스 일반적으로 더 "2 -like STL"당신은 같은 벡터를받을 수 있지만하지 않습니다

  1. 통지 것을 반복자의 더 아마 몇 . 실제로 표준 라이브러리는이 문제를 해결하는 훨씬 더 추상적 인 방법을 선호합니다 (std::ostream_iterator). std::copy을 사용하여 컨테이너 반복기에서 출력 스트림으로 데이터를 복사 할 수 있습니다.
  2. : 내 생각에 너는 나를 믿지 않을거야.
+0

감사합니다. 이것은 물건을 깨끗이합니다. – TheSOFan

+0

@ TheSOFan : 다행스럽게도 도움이되었습니다. 이 경우 StackOverflow에서 대답을 수락하는 것이 관습입니다 (투표 수 근처의 진드기를 클릭하십시오). 당신이 이것을 모르는 경우에, 당신은 당신의 더 오래된 질문으로 그것을해야한다 (또한 당신에게 몇몇 점을 준다). –

관련 문제