`
chenqi210
  • 浏览: 76984 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

多输出带前缀输出流

    博客分类:
  • c++
 
阅读更多
http://stackoverflow.com/questions/2212776/overload-handling-of-stdendl 写道
#include <iostream>
#include <sstream>

class MyStream: public std::ostream
{
// Write a stream buffer that prefixes each line with Plop
class MyStreamBuf: public std::stringbuf
{
std::ostream& output;
public:
MyStreamBuf(std::ostream& str)
:output(str)
{}

// When we sync the stream with the output.
// 1) Output Plop then the buffer
// 2) Reset the buffer
// 3) flush the actual output stream we are using.
virtual int sync ( )
{
output << "[blah]" << str();
str("");
output.flush();
return 0;
}
};

// My Stream just uses a version of my special buffer
MyStreamBuf buffer;
public:
MyStream(std::ostream& str)
:std::ostream(&buffer)
,buffer(str)
{
}
};


int main()
{
MyStream myStream(std::cout);
myStream << 1 << 2 << 3 << std::endl << 5 << 6 << std::endl << 7 << 8 << std::endl;
}

> ./a.out
[blah]123
[blah]56
[blah]78
>
 

略微修改后:

class test2_stream : public ostream
{
	class test2_streambuf : public stringbuf
	{
		public:
			test2_streambuf(test2_stream &parent)
				:m_parent(parent)
			{}

			virtual int sync()
			{
				string t = DateTime::now().toString();
				string s = str();
				for(vector<ostream*>::iterator it = m_parent.m_outs.begin();
						it != m_parent.m_outs.end();
						++it) {
					(**it) << '[' << t << "]: " << s;
					(**it).flush();
				}
				seekoff(0, ios::beg);
				return 0;
			}
		private:
			test2_stream &m_parent;
	};

	public:
		test2_stream()
			:ostream(&m_buf),
			m_buf(*this)
		{}
		test2_stream& attach(ostream& os)
		{
			m_outs.push_back(&os);
			return *this;
		}
		test2_stream& detach(ostream& os)
		{
			m_outs.erase(std::remove(m_outs.begin(), m_outs.end(), &os), m_outs.end());
			return *this;
		}
	private:
		vector<ostream*> m_outs;
		test2_streambuf m_buf;
};
 

 

 

 

0
5
分享到:
评论

相关推荐

    gif图片文件编解码

    编码不存在,前缀对应的字符串的第一个字符作为后缀(这时当前字符串肯定不存在,字典中下一个可用编码肯定等于刚取出的编码),字符串添加到字典中,编码作为前缀,前缀对应的字符串添加到输出流,继续取。...

    lzw.rar_LZW编码_lzw_lzw编码方式_时空码_词典编码lzw

    a 把代表当前前缀P的马子输出到码字流; b 把缀-符串P+C添加到词典; c 令P=C//(现在的P仅包含一个字符C); 4. 判断字符流中是否还有码字要译 (1)如果是,就返回到2; (2)如果否 a 把代表当前前缀P的码字输出...

    基于matlab仿真的ofdm系统基带信号在多径信道下的传输代码更新-2023-04-19.rar

    仿真系统构成:信号输入(为随机比特流)、OFDM调制、仿真信道传输、OFDM解调、信号输出(可能存在误码的比特率); 仿真分析内容:根据输入、输出比特流计算不同信噪比条件下的误码率,并绘制曲线。 对调制的要求:...

    基于matlab的多径信道下OFDM通信系统误码率仿真(分析比较)

    仿真系统构成:信号输入(为随机比特流)、OFDM调制、仿真信道传输、OFDM解调、信号输出(可能存在误码的比特率); 仿真分析内容:根据输入、输出比特流计算不同信噪比条件下的误码率,并绘制曲线。 对调制的要求:...

    基于matlab的多径信道下OFDM通信系统误码率仿真

    仿真系统构成:信号输入(为随机比特流)、OFDM调制、仿真信道传输、OFDM解调、信号输出(可能存在误码的比特率); 仿真分析内容:根据输入、输出比特流计算不同信噪比条件下的误码率,并绘制曲线。 对调制的要求:...

    KCLog.java

    /** 日志文件输出流, 追加到文件尾 */ private static RandomAccessFile logOutFileStream; public static void main(String[] args) throws Exception { // (可选) 设置日志输出级别, 默认为 INFO 级别 ...

    大数据流处理框架介绍.pdf

    因为在流处理中为了防⽌突发或激增流量 压垮流处理集群,通常将收集过后的数据输出到kafka分布式消息系统,然后流处理集群去消费kafka中的数据,下⾯介绍两种常⽤的⽇志收 集框架以及他们如何对接kafka. 1).Apache ...

    基于语法制导翻译的表达式转换编译器

    2、词法分析模块用于读入输入串,并将其转换成供语法分析模块使用的记号流。其中包括滤掉空格和注释、识别常数、识别标识符和关键字等功能; 3、要求在语法分析模块中利用语法制导翻译技术完成具体的中缀表达式到...

    NumericIO.jl:精细控制数字输出

    基本用法NumericIO.jl尝试提供c ++ ios_base配置性的便利(例如:设置ios_base::precision ),而无需修改基本流对象的输出格式。 相反,NumericIO.jl使用FormattedIO包装器对象以所需的输出格式打印数据。 这似乎与...

    C++词频统计,数据结构期末大作业,包含源码,附带思维导图讲解

    字典树又叫前缀树,是处理字符串常用的数据结构,最近和朋友一起粗略写了一下关于字典树的词频统计。 一、功能介绍 文件流读写单词; 将读到的单词插入树中; 打印树,打印出单词和个数以及词频; 单个单词的个数和...

    libmemstream:该库为OS X提供POSIX动态内存缓冲区流功能

    libmemstream是OS X的动态内存缓冲区流功能(即 , 和 )的实现。 源代码是基于在的 。 建造 要构建该库,只需从项目的根目录运行./build即可。 这将在output子目录中产生所有输出。 正在安装 要安装该库,请先对...

    玩转模板--自动代码生成工程

    为前缀的参数(可设定设定多个),可在模板中直接调用输出 例如: single.name=xixi 模版调用: $name 输出:xixi 1.3 无任何前缀的参数,为工程要强制使用的参数,必须填写 2. 封装数据库表参数,目前只支持达梦数据库...

    C++的概念/解释,可打印,华南师范大学C++考过。

    29. 标准的输出流对象有哪些 8 30. 标准的输入流对象有哪些 9 31. 文件流类与文件流对象 9 32. 两个短整型数相加后,结果是什么类型? 9 33. 什么是值传递? 9 34. 值传递、引用传递和指针传递的区别是什么? 9 35. ...

    webgpu:webgpu GPU代码实现,包括CUDA、OpenCL、OpenACC和C++ AMP

    给定一个长度为 n 的列表 (lst) 输出其前缀 sum = {lst[0], lst[0] + lst[1], lst[0] + lst[1] + ... + lst[n-1]} 图像直方图均衡化 CUDA 流 API 向量加法 OpenCL的“你好世界” OpenACC的“你好世界” C++ AMP 的...

    harmonyos2-Project2-StreamCompaction:并行算法研究:流压缩

    和声2 项目2 并行算法研究:流压缩 介绍 迄今为止,您在职业生涯中学到的许多算法通常都是从串行的角度开发的。 谈到 GPU,我们主要着眼于大规模并行工作。 因此,有必要重新调整我们的思维。...输出: [ 3 7 13 20 2

    turbo:前端工作流启动板。 面向简单的静态网站

    由设计的速度旨在创建简单的静态网站的前端工作流。 不完整的功能列表: 自动输出@ 2x和@ 1x图像 自动无损优化所有图像 更少-&gt;具有自动前缀CSS,并结合了媒体查询 使静态内容创建模块化的部分 车把帮手 最小化...

    目标是拥有一个易于集成到各种构建脚本中的命令运行程序,并自动具有出色的CLI输出(包括前缀,换行),并自动具有出色的文本文件输出,而无需担心Node流等。 受到我使用Cordova CLI时遇到的一些困难的启发,有时...

    process-dispatcher-worker:使用流、通道和持久存储处理东西的(n 固执的)样板

    使用流、通道和持久存储处理内容的(n 固执的)样板。 环境变量: DEBUG - 调试输出(* 代表所有)(可选) 例如: * NODE_ENV - 环境(“开发”、“分期”、“生产”) 示例: development MONGO_URL - ...

    stderr:当进程写入 stderr 时刷新 OS 通知

    标准错误 当进程写入stderr时刷新 OS 通知 安装 npm install stderr --save 或者 ... 标准输入、输出和错误流应该与命令的非前缀版本完全相同。 这意味着您想进入的所有管道、重定向和 bash 疯狂

    lzw实验报告.docx

    (2)如果"否" 把代表当前前缀P的码字输出到码字流; 把缀-符串P+C添加到词典; 令P := C //(现在的P仅包含一个字符C); lzw实验报告全文共6页,当前为第1页。步骤4:判断码字流中是否还有码字要译 (1)如果"是",就...

Global site tag (gtag.js) - Google Analytics