首页 > 后端开发 > C++ > 正文

如何创建自定义 C Stream 操纵器来修改后续流项目?

Mary-Kate Olsen
发布: 2024-11-07 10:38:03
原创
556 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板