>백엔드 개발 >C++ >후속 스트림 항목을 수정하기 위해 사용자 정의 C 스트림 조작기를 어떻게 만들 수 있습니까?

후속 스트림 항목을 수정하기 위해 사용자 정의 C 스트림 조작기를 어떻게 만들 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-07 10:38:03563검색

How Can You Create a Custom C   Stream Manipulator to Modify Subsequent Stream Items?

후속 스트림 항목을 변경하기 위한 사용자 정의 C 스트림 조작기

C에서 16진수 조작기를 사용하여 숫자를 16진수 표현으로 변환할 수 있습니다. . 그런데 현재 항목뿐만 아니라 스트림의 후속 항목까지 수정해야 한다면 어떻게 될까요?

플러스원 매니퓰레이터 만들기

스트림의 다음 숫자 값을 확인하려면 다음 단계를 따르세요.

1. 각 스트림에 상태 저장:

iword 및 geti()를 사용하여 각 스트림에 상태를 저장합니다.

inline int geti() { 
    static int i = ios_base::xalloc();
    return i;
}

2. 조작기 기능 정의:

저장된 상태를 설정 및 해제하는 함수를 만듭니다.

ostream& add_one(ostream& os) { os.iword(geti()) = 1; return os; } 
ostream& add_none(ostream& os) { os.iword(geti()) = 0; return os; }

3. 숫자 출력 차단:

my_num_put 패싯을 생성하여 숫자 출력을 차단하고 저장된 증분을 적용합니다.

struct my_num_put : num_put<char> {
    iter_type 
    do_put(iter_type s, ios_base&amp; f, char_type fill, long v) const { 
        return num_put<char>::do_put(s, f, fill, v + f.iword(geti())); 
    } 

    iter_type 
    do_put(iter_type s, ios_base&amp; f, char_type fill, unsigned long v) const { 
        return num_put<char>::do_put(s, f, fill, v + f.iword(geti())); 
    } 
}; 

4. 조작기 테스트:

조작기를 사용하여 다음 숫자 값을 증가시키고 결과를 표시합니다.

int main() {
    // outputs: 11121011
    cout.imbue(locale(locale(),new my_num_put));
    cout << add_one << 10 << 11 
         << add_none << 10 << 11;
}

일회용 증분 재설정:

다음 숫자만 증가시키려면 do_put을 호출할 때마다 저장된 상태를 재설정하세요.

위 내용은 후속 스트림 항목을 수정하기 위해 사용자 정의 C 스트림 조작기를 어떻게 만들 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.