首頁 >後端開發 >C++ >如何建立自訂 C Stream 操縱器來修改後續流程專案?

如何建立自訂 C Stream 操縱器來修改後續流程專案?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-07 10:38:03560瀏覽

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

用於更改後續流項目的自訂C 流操縱器

在C 中,十六進位操縱器可用於將數字轉換為其十六進位表示形式。但是,如果您不僅需要修改目前項目,還需要修改流中的後續項目,該怎麼辦?

建立 plusone 操縱器

建立一個遞增流上的下一個數值,請依照下列步驟操作:

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 Stream 操縱器來修改後續流程專案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn