我想提供一个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实现。

您甚至可以创建一个使用rdbufstreambuf函数来获取当前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/

10-11 19:04