首页 > 后端开发 > C++ > 如何使用自定义流操纵器来修改 C 中输出流上的未来项目?

如何使用自定义流操纵器来修改 C 中输出流上的未来项目?

Linda Hamilton
发布: 2024-11-07 02:12:03
原创
240 人浏览过

How can custom stream manipulators be used to modify future items on an output stream in C  ?

C 中的自定义流操纵器修改

使用自定义操纵器修改流上的未来项目是 C 中的一种通用技术。虽然“hex”等操纵器会改变输出格式,但调整值的操纵器(如“plusone”)提供了更大的灵活性。

为了在每个流中存储状态,使用了 iword 函数和 xalloc 索引。

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; }
登录后复制

利用构面,可以自定义数字输出。 my_num_put 结构重写 do_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())); 
    } 
}; 
登录后复制

应用此操纵器,数值输出被修改:

int main() {
    // outputs: 11121011
    cout.imbue(locale(locale(),new my_num_put));
    cout << add_one << 10 << 11 
         << add_none << 10 << 11;
}
登录后复制

对于单个项目修改,重置建议在每次 do_put 调用后将单词改为 0。

以上是如何使用自定义流操纵器来修改 C 中输出流上的未来项目?的详细内容。更多信息请关注PHP中文网其他相关文章!

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