인수 없이 고유 조작자 작성
인수를 사용하지 않는 조작자를 작성하려면 클래스 파생이나 복잡한 매크로를 사용할 필요가 없습니다. 프린터에서 굵게 모드로 전환하려면 쌍 <ESC>[가 필요하다고 가정합니다. 이 경우 스트림에 이 쌍을 직접 삽입할 수 있습니다.
cout << "regular " << '\033' << '[' << "boldface" << endl;
또는 문자를 삽입하는 bold
조작자를 정의할 수 있습니다.
ostream& bold(ostream& os) {
return os << '\033' << '[';
}
cout << "regular " << bold << "boldface" << endl;
전역적으로 정의된 bold
함수는 ostream
참조 인수를 사용하며 ostream
참조를 반환합니다. 프라이빗 클래스 요소에 액세스할 필요가 없으므로 멤버 함수나 친구가 아닙니다. bold
함수는 스트림에 연결됩니다. 해당 함수 유형을 허용하기 위해 스트림의 <<
연산자가 다음과 같은 선언을 사용하여 오버로드되기 때문입니다.
_Myt& operator<<(ios_base& (__cdecl *_Pfn)(ios_base&))
{
// call ios_base manipulator
(*_Pfn)(*(ios_base *)this);
return (*this);
}
이 기능을 사용하여 오버로드된 다른 연산자를 확장할 수 있습니다. 이 경우 스트림에 문자를 삽입하는 것은 bold
부수적입니다. 함수는 스트림에 삽입될 때 호출되며 인접한 문자가 인쇄될 때 반드시 그런 것은 아닙니다. 따라서 스트림의 버퍼링으로 인해 인쇄가 지연될 수 있습니다.