创建修改后续流项目的自定义流操纵器
简介:
在 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中文网其他相关文章!