Ncurses和ostream类方法
Ncurses and ostream class method?
这可能是个愚蠢的问题,但我会试一试。
有没有一种方法可以让类方法将ostream对象作为参数输出到Ncurses窗口?
首先,我们应该利用std::streambuf。这里有一个非常简单的例子,它只是将std::cout重定向到一个简单的打印机
#include <streambuf>
#include <iostream>
class ncursesbuf: public std::streambuf {
public:
ncursesbuf() {}
virtual int overflow(int c) {
printf("'%d'n", c);
}
};
class ncurses_stream : public std::ostream {
public:
ncursesbuf tbuf_;
std::ostream &src_;
std::streambuf * const srcbuf_;
ncurses_stream(std::ostream &o) : src_(o), srcbuf_(o.rdbuf()), std::ostream(&tbuf_) {
o.rdbuf(rdbuf());
}
~ncurses_stream() {
src_.rdbuf(srcbuf_);
}
};
int main(int argc, char **argv) {
std::cout << "hello worldn";
{
ncurses_stream foo(std::cout);
std::cout << "hello worldn";
}
std::cout << "back to original staten";
return 0;
}
然后我们可以修改它以使用ncurses
#include <streambuf>
#include <ncurses.h>
#include <iostream>
class ncursesbuf: public std::streambuf {
public:
ncursesbuf() {}
virtual int overflow(int c) {
printw("%c", c);
}
};
class ncurses_stream : public std::ostream {
public:
ncursesbuf tbuf_;
std::ostream &src_;
std::streambuf * const srcbuf_;
ncurses_stream(std::ostream &o) : src_(o), srcbuf_(o.rdbuf()), std::ostream(&tbuf_) {
o.rdbuf(rdbuf());
}
~ncurses_stream() {
src_.rdbuf(srcbuf_);
}
};
int main(int argc, char **argv) {
/* ncurses setup */
initscr();
ncurses_stream foo(std::cout);
std::cout << "hello worldn";
refresh();
sleep(5);
endwin();
return 0;
}
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 在静态库中嵌入类方法
- 如何制作一个将函数作为参数的类方法
- 从父类方法返回子类对象
- 使用用户定义的参数调用future/async并调用类方法
- 重载类方法的不明确调用
- 单独定义模板化嵌套类方法的正确语法
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 如何访问由共享指针保存的类方法?
- 将子类方法声明为基类的友元
- 我的模板类方法返回错误类型?
- Qt将信号与另一个类方法连接
- 我无法使用C++指针指向类方法返回的 std::vector
- 如何在成为指向基类的指针后保留对子类方法的使用?
- 检查类方法中是否(此 == nullptr)
- 从基类实例调用派生类方法而不进行强制转换
- 函数从唯一代码调用正确的子类方法
- C++ - 如何在不静态的情况下将回调绑定到类方法?
- C++ |DLL / EXE - 如何从导出的类调用另一个类方法?
- Ncurses和ostream类方法