#include <iostream>
#include <memory>
using namespace std;
#define MAX_SIZE 1204
class UpperCaseStreamBuf : public std::streambuf {
protected:
int sync() override {
if (pptr() != pbase()) {
for (auto &c: buffer) {
c = toupper(c);
}
//输出
if (fputs(buffer, stdout) == EOF) {
return -1;
}
//重置put pointer
setp(buffer, buffer + sizeof(buffer));
}
return basic_streambuf::sync();
}
private:
char buffer[MAX_SIZE]{};
public:
UpperCaseStreamBuf() {
//设置put buffer
setp(buffer, buffer + sizeof(buffer));
}
};
int main() {
UpperCaseStreamBuf upper_case_stream_buf;
//使用我们新定义的streambuf
std::ostream out(&upper_case_stream_buf);
//31 HEXADECIMAL:1F
out << "Hello World!" << endl;
}
c++ ostream底层存储streambuf的简单继承实现
最新推荐文章于 2024-07-17 15:57:43 发布