我想提供一个std::ostream
,从用户的 Angular 来看,它可以加密也可以不加密。
想象一下一些使用std::ostream&
的随机函数:
void write_stuff( std::ostream& stream ) {
os << "stuff";
}
stuff
是以明文形式输出还是被加密,取决于stream
参数的初始化方式。我正在考虑从
std::basic_streambuf
继承,但是我不确定这是最好的方法。我认为理想的情况是在实际输出内容之前运行某种过滤器对象。这样,链接操作就很容易,例如先加密再进行十六进制编码,这是使我自己创建的basic_streambuf
似乎不起作用的好处(至少不容易)。有什么建议吗?
谢谢。
更新:我按照接受的答案列出的策略进行操作。我发现这篇关于编写custom
streambuf
which performs XOR obfuscation的文章作为起点非常有帮助。 最佳答案
可以根据另一个任意streambuf
来实现streambuf
,该streambuf
可以作为参数传递给构造函数,也可以使用特殊的成员函数进行设置。这样,您就可以像想到的那样堆叠ostream
实现。
您甚至可以创建一个使用rdbuf
的streambuf
函数来获取当前streambuf
的操纵器,在streambuf
上调用一个函数来设置“堆叠的” rdbuf
,然后再次调用ostream
来用您自己的替换streambuf
的ojit_code。
aes_ctr_streambuf encrypter(key);
zlib_streambuf compressor;
::std::cout << stack_streambuf(encrypter) << stack_streambuf(compressor);
关于c++ - 透明地处理插入到ostream中的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3882682/