C++ 有可能改变cout的功能吗?
我想知道是否有可能模拟打字机效果(意味着每个字符之间的停顿),但是从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 << "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;