Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有可能改变cout的功能吗?_C++ - Fatal编程技术网

C++ 有可能改变cout的功能吗?

C++ 有可能改变cout的功能吗?,c++,C++,我想知道是否有可能模拟打字机效果(意味着每个字符之间的停顿),但是从cout全局类 比如说 cout << "Hi, this is a cow." << endl; 是否可以将cout的全局类更改为类似于打字机功能的类 我知道我可以把所有的cout都改成typeWriter(“xxx”),但这需要很长时间(几个小时)。std::cout不是一个类,而是一个静态对象。它是一个std::ostream。您可以通过更改底层streambuffer来更改std::ostrea

我想知道是否有可能模拟打字机效果(意味着每个字符之间的停顿),但是从cout全局类

比如说

cout << "Hi, this is a cow." << endl;
是否可以将cout的全局类更改为类似于打字机功能的类


我知道我可以把所有的cout都改成typeWriter(“xxx”),但这需要很长时间(几个小时)。

std::cout
不是一个类,而是一个静态对象。它是一个
std::ostream
。您可以通过更改底层streambuffer来更改
std::ostream
的行为。从
std::basic\u streambuf
派生您的streambuffer。它可能使用旧的streambuff作为实现的基础,只需增加输出的速度:

class TypeWriterStreambuf: public std::basic_streambuf<char> {
    public:
        TypeWriterStreambuff(std::basic_streambuf<char>* base, 
                             std::chrono::milliseconds delay) : // ...
};

从现在起,输出应以该打字机的样式编写。

std::cout
不是一个类,而是一个静态对象。它是一个
std::ostream
。您可以通过更改底层streambuffer来更改
std::ostream
的行为。从
std::basic\u streambuf
派生您的streambuffer。它可能使用旧的streambuff作为实现的基础,只需增加输出的速度:

class TypeWriterStreambuf: public std::basic_streambuf<char> {
    public:
        TypeWriterStreambuff(std::basic_streambuf<char>* base, 
                             std::chrono::milliseconds delay) : // ...
};

从现在起,输出应该用那种打字机的风格来写。

我看到你写的是
cout
,而不是
std::cout
——你使用
名称空间std?在本例中,这实际上可能很有用,因为您可以编写一个名为
cout
的自定义对象,该对象重定向到您的
打字机@cow9000,您可能没有理解我所说的。大型RPG游戏通常需要几百人年才能完成。对不起,我认为你文章中的代码与这个问题有关。那没关系!Re:“cout全局类”--我不知道您的cout,但是
std::cout
是一个对象,而不是一个类。我看到您编写了
cout
而不是
std::cout
-您是否使用
使用命名空间std?在本例中,这实际上可能很有用,因为您可以编写一个名为
cout
的自定义对象,该对象重定向到您的
打字机@cow9000,您可能没有理解我所说的。大型RPG游戏通常需要几百人年才能完成。对不起,我认为你文章中的代码与这个问题有关。那没关系!回复:“cout全局类”--我不知道您的cout,但是
std::cout
是一个对象,而不是一个类。谢谢!我回家后会试试这个。也谢谢你的澄清,很好的回答。地狱是100MS有效C++(@ BjarneStroustrup)- Nick,你应该知道;这是从C++14开始的标准库中提供的一个用户定义的文本:@cdonat哈哈,它更像是一个。。。讽刺的绰号LOL.C++从来没有用它的表达来让我吃惊。谢谢!我回家后会试试这个。也谢谢你的澄清,很好的回答。地狱是100MS有效C++(@ BjarneStroustrup)- Nick,你应该知道;这是从C++14开始的标准库中提供的一个用户定义的文本:@cdonat哈哈,它更像是一个。。。讽刺的绰号LOL.C++从来没有用它的表达来让我吃惊。
using namespace std::chrono_literals;
auto b = new TypeWriterStreambuff{std::cout.rdbuf(), 100ms};
std::cout.rdbuf(b);

std::cout << "Hello World" << std::endl;