作者博客:bot7.cc
利用MEX进行混合编程时,常常会用到 std::cout
,但是直接使用是不会在Matlab命令窗口显示的,对cout进行重定向之后可以将显示结果打印到Matlab的命令窗口,非常方便。
首先需要定义一个mstream类
class mstream : public std::streambuf {
public:
protected:
virtual std::streamsize xsputn (const char *s, std::streamsize n) {
mexPrintf ("%.*s", n, s);
return n;
}
virtual int overflow (int c = EOF) {
if (c != EOF) {
mexPrintf ("%.1s", &c);
}
return 1;
}
};
之后在mexFunction中进行重定向:
void mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
mstream mout;
std::streambuf *outbuf = std::cout.rdbuf (&mout);//重定向cout
std::cout << "Hello World!" << std::endl;
std::cout.rdbuf (outbuf);//结束重定向
}
之后就可以愉快的使用std::cout
了,跟正常用法一样即可。