用於更改後續流項目的自訂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& 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())); } };
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中文網其他相關文章!