std::basic_ios::copyfmt

来自cppreference.com
< cpp‎ | io‎ | basic ios
basic_ios& copyfmt(const basic_ios& other);

复制流 other 的状态到 *this 中。以下列序列进行:

1) 传递 erase_event 为参数,调用 register_callback() 所注册的每个回调。
2)other 复制所有成员对象到 *this ,除了 rdstate() 、异常掩码和 rdbuf() 。特别是复制本地环境、格式化标志、数组 std::ios_base::iwordstd::ios_base::pword 的内容(但不是 iwordpword 指针本身)、回调和 tie 的流。
3) 传递 copyfmt_event为参数,调用 register_callback() 所注册的每个回调。
4)other 复制异常掩码到 *this ,如同通过调用 exceptions(other.exceptions())

目录

[编辑] 参数

other - 用作源的另一流

[编辑] 返回值

*this

[编辑] 注意

通过回调的第二趟可用于深复制 std::ios_base::pword 中的指针所指向的用户定义对象。

copyfmt() 可用于保存和恢复流状态。 Boost 为相同目的提供更加细粒度的 IO state savers 库。

[编辑] 示例

令 ofstream 对象 "out" 表现准确地类似 std::cout ,包括格式化、 tie() 到 std::cin 等。

#include <iostream>
#include <fstream>
 
int main()
{
    std::ofstream out;
 
    out.copyfmt(std::cout); // 复制 rdstate 和 rdbuf 外的所有内容
    out.clear(std::cout.rdstate()); // 复制 rdstate
    out.basic_ios<char>::rdbuf(std::cout.rdbuf()); // 共享缓冲
 
    out << "Hello, world\n";
}

输出:

Hello, world