建立修改後續流項目的自訂流操縱器
簡介:
在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; }
將增量限制為下一個項目:
僅增量下一個項目item,每次do_put 操作後將流狀態重置為0。
以上是如何建立自訂流程操縱器來修改 C 中的後續流程項目?的詳細內容。更多資訊請關注PHP中文網其他相關文章!