相关疑难解决方法(0)

正确地重载了​​一个stringbuf来替换MATLAB mex文件中的cout

当MATLAB桌面打开时,MathWorks当前不允许您使用mex文件中的cout,因为它们已重定向stdout.他们目前的解决方法是提供一个函数mexPrintf,它们要求您使用它.在谷歌搜索了一下之后,我认为可以扩展std :: stringbuf类来完成我需要的工作.这是我到目前为止所拥有的.这是否足够强大,还是有其他方法需要重载或更好的方法来做到这一点?(寻找一般UNIX环境中的可移植性以及如果此代码未与mex可执行文件链接,则能够正常使用std :: cout)

class mstream : public stringbuf {
public:
  virtual streamsize xsputn(const char *s, std::streamsize n) 
  {
mexPrintf("*s",s,n);
return basic_streambuf<char, std::char_traits<char>>::xsputn(s,n);
  }
}; 

mstream mout;
outbuf = cout.rdbuf(mout.rdbuf());    
Run Code Online (Sandbox Code Playgroud)

c++ matlab cout stringbuffer mex

8
推荐指数
2
解决办法
3273
查看次数

使Rcout输出立即显示在R控制台上

我使用Rcpp(具体而言RcppArmadillo)编写了一个MCMC采样器.我希望我的采样器将定期状态消息打印到R控制台,但是当采样器终止时,消息会立即显示.输出语句是:

Rcout << "Progress => " 
      << double(iterations) / double(maxit) * 100 
      << "%" 
      << std::endl;
Run Code Online (Sandbox Code Playgroud)

可以增加此代码,以便其输出立即显示在R控制台上吗?

R版本:2.14.1

平台:达尔文9.8.0

Rcpp版本:0.9.10

r flush rcpp

5
推荐指数
1
解决办法
1268
查看次数

标签 统计

c++ ×1

cout ×1

flush ×1

matlab ×1

mex ×1

r ×1

rcpp ×1

stringbuffer ×1