Matlab与C/C++混合编程 重定向cout到Matlab命令窗口

作者博客: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了,跟正常用法一样即可。

你可能感兴趣的:(Matlab与C/C++混合编程 重定向cout到Matlab命令窗口)