> 백엔드 개발 > C++ > 함수가 서식 플래그를 수정한 후 `std::cout`의 원래 상태를 어떻게 복원할 수 있나요?

함수가 서식 플래그를 수정한 후 `std::cout`의 원래 상태를 어떻게 복원할 수 있나요?

Patricia Arquette
풀어 주다: 2024-12-06 22:17:15
원래의
146명이 탐색했습니다.

How Can I Restore the Original State of `std::cout` After a Function Modifies Its Formatting Flags?

제어권 회복: std::cout의 무결성 복원

질문:

함수가 다음과 같은 시나리오에서 printHex라고 부르겠습니다. std::cout의 상태를 수정합니다(예: 기본, 필드 너비 등), 함수 호출 후 원래 상태를 어떻게 복원할 수 있나요? 이 문제는 std::cout을 사용하는 후속 출력이 printHex 내에서 이루어진 상태 변경으로 인해 손상될 때 발생합니다.

답변:

std::cout 및 원래 설정으로 되돌리면 헤더(또는 헤더). 이 복원 프로세스에는 두 가지 주요 단계가 포함됩니다.

  1. 현재 상태 캡처: std::ios_base::fmtflags f(cout.flags())를 사용하여 현재 형식 지정 플래그를 검색합니다. f라는 변수에 저장합니다. 이렇게 하면 printHex에 의해 변경되기 전에 std::cout의 상태가 캡처됩니다.
  2. 원래 상태 복원: printHex가 작업을 완료하면 std의 원래 설정을 복원할 수 있습니다. ::cout.flags(f)를 호출하여 cout을 실행합니다. 이 작업은 std::cout을 함수 호출 이전 상태로 재설정하여 후속 출력 작업이 예상대로 작동하도록 보장합니다.

또는 리소스 획득은 초기화를 사용하여 복원 프로세스를 구현할 수 있습니다. (RAII) 플래그를 자동으로 관리하는 관용구입니다. 예는 다음과 같습니다.

class RestoreCoutFlags {
public:
    RestoreCoutFlags(std::ostream& stream)
        : _savedFlags(stream.flags()) {}

    ~RestoreCoutFlags() {
        stream.flags(_savedFlags);
    }

    operator std::streambuf*() const {
        return stream.rdbuf();
    }

private:
    std::ios_base::fmtflags _savedFlags;
};
로그인 후 복사

이 수업을 사용하면 다음과 같이 복원할 수 있습니다.

{
    RestoreCoutFlags r(std::cout);

    // Code that modifies std::cout flags

} // When the block exits, r is automatically destroyed, restoring the flags.
로그인 후 복사

위 내용은 함수가 서식 플래그를 수정한 후 `std::cout`의 원래 상태를 어떻게 복원할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿