我想知道是否可以模拟打字机效果(意味着在每个字符之间暂停。)但是来自cout全局类。
例如
cout << "Hi, this is a cow." << endl;
具有相同的效果
typeWriter("Hi, this is a cow.\n");
是否可以将cout的全局类更改为类似于typeWriter函数的内容?
我知道我可以将所有cout更改为typeWriter(“xxx”),但这需要很长时间(几个小时)。
答案 0 :(得分:2)
std::cout
不是一个类,而是一个静态对象。这是std::ostream
。您可以通过更改基础streambuffer来更改std::ostream
的行为。从std::basic_streambuf<char>
导出你的streambuffer。它可能使用旧的streambuff作为实现的基础,只需添加输出的减速:
class TypeWriterStreambuf: public std::basic_streambuf<char> {
public:
TypeWriterStreambuff(std::basic_streambuf<char>* base,
std::chrono::milliseconds delay) : // ...
};
然后替换std::cout
之一:
using namespace std::chrono_literals;
auto b = new TypeWriterStreambuff{std::cout.rdbuf(), 100ms};
std::cout.rdbuf(b);
std::cout << "Hello World" << std::endl;
从现在开始,输出应该以打字机的形式写出来。