오버로딩 연산자<< std::endl
스트림 삽입 연산자(operator<<)를 오버로드할 때 std::endl을 삽입 인수로 포함하려고 하면 일반적인 문제가 발생합니다. 오류 "오류 C2678: 이진 '<<' : 연산자를 찾을 수 없습니다."는 시스템이 왼쪽 피연산자 UIStream에 대해 호환되는 연산자를 찾을 수 없음을 나타냅니다.
이 오류의 근본적인 이유는 std::endl이 유형이 아니라 함수이기 때문입니다. 이를 극복하려면 std::cout이 std::endl을 처리하는 방법을 이해해야 합니다. std::cout은 연산자<<를 구현합니다. std::endl과 동일한 서명을 가진 함수 포인터를 사용합니다. 그런 다음 함수를 호출하고 반환 값을 전달합니다.
이 동작을 에뮬레이트하기 위해 추가 연산자<< 사용자 정의 MyStreamManipulator 서명이 있는 함수를 취하는 MyStream 클래스의 함수입니다. 이 함수는 지정된 함수를 호출하고 반환 값을 반환합니다.
std::endl을 구체적으로 처리하기 위해 MyStreamManipulator 서명과 일치하는 정적 MyStream::endl 함수를 정의합니다. 이 함수 내에서 새 줄을 인쇄하고 버퍼 플러시와 같은 추가 스트림 작업을 수행합니다.
또한 연산자<< std::cout에서 사용하는 StandardEndLine 함수 서명을 허용하는 함수입니다. 이 함수는 std::cout을 인수로 사용하여 std::endl을 삽입할 수 있는 manip 함수를 호출합니다.
이 단계를 수행하면 연산자<< 사용자 정의 데이터와 std::endl 삽입을 모두 처리하기 위해 사용자 정의 MyStream 클래스에 있습니다. 이를 통해 스트림 조작을 완벽하게 제어할 수 있는 std::cout의 다양한 대안으로 MyStream을 사용할 수 있습니다.
위 내용은 오버로드하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!