我想修改cout,以便显示文字,例如,每个角色的打印之间有30ms的延迟......我无法想象我是第一个想要使用cout做这件事的人,但我也找不到相同的例子。
要清楚,我想覆盖流插入运算符(不重载)。
我已经编写了自己的输出函数,我想看看是否可以修改整个解决方案的标准行为。
答案 0 :(得分:2)
您可以执行以下操作:
class MyDelayStream
{
public:
MyDelayStream(std::ostream& os) : os(os) {}
template <typename T>
MyDelayStream& operator <<(const T& t)
{
using namespace std::literals;
std::stringstream ss;
ss << t;
for (auto c : ss.str()) {
std::this_thread::sleep_for(30ms);
os << c;
}
return *this;
}
private:
std::ostream& os;
};
然后使用它:
MyDelayStream s(std::cout);
s << "hello" << 42 << '\n';
硬(缺失)部分是操纵者,其功能为std::endl
。