1. 程式人生 > 實用技巧 >Matlab與C/C++混合程式設計 重定向cout到Matlab命令視窗

Matlab與C/C++混合程式設計 重定向cout到Matlab命令視窗

利用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

了,跟正常用法一樣即可。