C++ Ncurses和ostream类方法?

C++ Ncurses和ostream类方法?,c++,C++,这可能是个愚蠢的问题,但我会试一试 有没有一种方法可以让类方法将ostream对象作为参数输出到Ncurses窗口?首先,我们应该利用std::streambuf。下面是一个非常简单的示例,它将std::cout重定向到一个简单的打印机 #include <streambuf> #include <iostream> class ncursesbuf: public std::streambuf { public: ncursesbuf() {} virtual

这可能是个愚蠢的问题,但我会试一试


有没有一种方法可以让类方法将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 world\n";
  {
    ncurses_stream foo(std::cout);
    std::cout << "hello world\n";
  }
  std::cout << "back to original state\n";
  return 0;
}
#包括
#包括
类ncursesbuf:public std::streambuf{
公众:
ncursesbuf(){}
虚拟整数溢出(INTC){
printf(“%d”\n,c);
}
};
类ncurses\u流:public std::ostream{
公众:
ncursesbuf tbuf;
std::ostream和src;
std::streambuf*const srcbuf_;
ncurses_流(std::ostream&o):src_o(o)、srcbuf_o(o.rdbuf()),std::ostream(&tbuf){
o、 rdbuf(rdbuf());
}
~ncurses_stream(){
src_uf.rdbuf(srcbuf_f);
}
};
int main(int argc,字符**argv){

std::cout首先,我们应该利用std::streambuf

#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 world\n";
  {
    ncurses_stream foo(std::cout);
    std::cout << "hello world\n";
  }
  std::cout << "back to original state\n";
  return 0;
}
#包括
#包括
类ncursesbuf:public std::streambuf{
公众:
ncursesbuf(){}
虚拟整数溢出(INTC){
printf(“%d”\n,c);
}
};
类ncurses\u流:public std::ostream{
公众:
ncursesbuf tbuf;
std::ostream和src;
std::streambuf*const srcbuf_;
ncurses_流(std::ostream&o):src_o(o)、srcbuf_o(o.rdbuf()),std::ostream(&tbuf){
o、 rdbuf(rdbuf());
}
~ncurses_stream(){
src_uf.rdbuf(srcbuf_f);
}
};
int main(int argc,字符**argv){

std::cout您遇到的具体问题是什么?但是,是的,我非常确定有一种方法可以做到这一点。但是我对ncurses知之甚少。我有一个巨大的类层次结构,每个类都有打印函数,带有一个原型:print(ostream&out);我想以某种方式调用该函数,输出结果在Ncurses窗口中结束。OstringStream是否被视为ostream?如果是这样,我可以在stringstream中调用它,然后使用stringstream创建一个字符串,并将其与Ncurses的printw函数一起使用。不过,似乎有很多额外的工作……如何访问Ncurses您的C++程序中的窗口?您可以重定向“<代码> STD::OsStuts对象的输出。请显示您的代码。然后我可以帮助您修复它。是的,<代码> StrugStuts<代码>被认为是<代码> OsFrase<代码>。除了类层次结构之外,我还没有编写任何东西。我必须将它写入某个S。规格说明。我只是为了自己的测试驱动而计划做一个ncurses前端,这样我就可以让控制台中的窗口保存来自各个类的更新输出。一个
stringstream
被认为是
ostream
回答了我的问题。我可以传入一个
stringstream
,然后用它创建一个
string
并将字符串传递到给定窗口的ncurses
printw()
。谢谢!!!您遇到的具体问题是什么?但是,是的,我非常确定有一种方法可以做到这一点。不过我对ncurses知之甚少。我有一个巨大的类层次结构,每个类都有打印函数,带有一个原型:print(ostream&out);我想以某种方式调用该函数,输出结果在Ncurses窗口中结束。OstringStream是否被视为ostream?如果是这样,我可以在stringstream中调用它,然后使用stringstream创建一个字符串,并将其与Ncurses的printw函数一起使用。不过,似乎有很多额外的工作……如何访问Ncurses您的C++程序中的窗口?您可以重定向“<代码> STD::OsStuts对象的输出。请显示您的代码。然后我可以帮助您修复它。是的,<代码> StrugStuts<代码>被认为是<代码> OsFrase<代码>。除了类层次结构之外,我还没有编写任何东西。我必须将它写入某个S。规格说明。我只是为了自己的测试驱动而计划做一个ncurses前端,这样我就可以让控制台中的窗口保存来自各个类的更新输出。一个
stringstream
被认为是
ostream
回答了我的问题。我可以传入一个
stringstream
,然后用它创建一个
string
并将字符串传递到给定窗口的ncurses
printw()
。谢谢!!!