修改cout以延迟屏幕输出?

时间:2015-10-13 23:26:09

标签: c++

我想修改cout,以便显示文字,例如,每个角色的打印之间有30ms的延迟......我无法想象我是第一个想要使用cout做这件事的人,但我也找不到相同的例子。

要清楚,我想覆盖流插入运算符(不重载)。

我已经编写了自己的输出函数,我想看看是否可以修改整个解决方案的标准行为。

1 个答案:

答案 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