연산자 재정의<< 향상된 스트림 조작을 위한
이 논의는 연산자 과부하 문제에 중점을 두고 있습니다<< std::endl의 기능을 통합합니다.
문제:
연산자를 오버로드할 때<<, my_stream과 같은 iostream은 기본 유형 및 문자열을 쉽게 출력할 수 있습니다. my_stream을 통해 << 10 << "heads", my_stream <<를 사용하여 std::endl 출력을 시도합니다. 끝; 컴파일 오류가 발생합니다.
해결책: 함수 포인터 이해
이 문제를 해결하는 열쇠는 std::endl이 함수라는 것을 인식하는 데 있습니다. std::cout 스트림은 연산자<< std::endl과 동일한 서명을 가진 함수 포인터를 허용합니다. 이 함수는 이후에 호출되고 해당 반환 값이 전달됩니다.
MyStream에 대한 엔드라인 조작 사용자 정의
my_stream에 대해 유사한 기능을 달성하려면 특수한 endl 함수를 정의할 수 있습니다. 다음 서명이 포함되어 있습니다:
typedef MyStream& endl(MyStream& stream)
이 기능 내에서 다음 작업에 필요한 추가 작업이나 수정을 수행할 수 있습니다. 특정 스트림 구현을 통해 std::endl이 사용될 때 의도한 대로 작동하는지 확인합니다.
오버로딩 연산자<< std::endl을 허용하려면
my_stream이 std::endl도 허용하도록 하려면 다른 연산자를 선언하세요<< 다음 서명을 사용합니다.
typedef std::basic_ostream> CoutType; typedef CoutType& (*StandardEndLine)(CoutType&); MyStream& operator<<(StandardEndLine manip) 이 연산자는 표준 출력 스트림에서 std::endl을 호출하여 std::cout의 동작을 모방하면서 my_stream의 사용자 정의 endl 구현과 호환됩니다.
위 내용은 어떻게 하면 오버로드할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!