후속 스트림 항목을 수정하는 사용자 정의 스트림 조작기 생성
소개:
C에서 스트림 조작기는 다음과 같습니다. 스트림 작업의 형식과 동작을 변경하는 데 유용합니다. 이 문서에서는 스트림에서 항목을 수정할 수 있는 사용자 정의 조작기를 만드는 방법을 살펴봅니다.
"하나 추가" 조작기 만들기:
에 설명된 "plusone" 조작기를 고려하세요. 질문:
int num2 = 1; std::cout << "1 + 1 = " << plusone << num2; // "1 + 1 = 2" std::cout << num2; // "1"
이 조작기를 구현하려면 두 가지를 달성해야 합니다.
상태 저장:
스트림 단어 저장소를 사용하여 상태를 스트림과 연결합니다.
inline int geti() { static int i = ios_base::xalloc(); return i; } ostream& add_one(ostream& os) { os.iword(geti()) = 1; return os; } ostream& add_none(ostream& os) { os.iword(geti()) = 0; return os; }
숫자 출력 수정:
사용자 정의 숫자 패싯을 정의합니다.
struct my_num_put : num_put<char> { iter_type do_put(iter_type s, ios_base& 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& f, char_type fill, unsigned long v) const { return num_put<char>::do_put(s, f, fill, v + f.iword(geti())); } };
이 패싯은 저장된 상태에 따라 숫자를 출력하기 전에 숫자를 증가시킵니다.
조작기 테스트:
int main() { // outputs: 11121011 cout.imbue(locale(locale(),new my_num_put)); cout << add_one << 10 << 11 << add_none << 10 << 11; }
다음 항목으로 증분 제한:
다음 항목만 증분하려면 항목에서 각 do_put 작업 후에 스트림 상태를 0으로 재설정합니다.
위 내용은 C에서 후속 스트림 항목을 수정하기 위해 사용자 정의 스트림 조작기를 어떻게 만들 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!