matlab的mexFunction中使用std::cout

编程技术  /  houtizong 发布于 3年前   103
在matlab、C++混合编程的时候,可能会用到之前的代码。代码中会有许多的输出(使用std::cout);
如果将这些std::cout重新用mexPrintf()写一遍,不仅费时费力,还造成原来的程序在别的地方无法编译的问题。

那么,有没有办法将std::cout重定向到mexPrintf呢?

原理没深究,直接转载代码:
http://stackoverflow.com/questions/243696/correctly-over-loading-a-stringbuf-to-replace-cout-in-a-matlab-mex-file
先定义一个自己的streambuf类:
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 << "haha" << std::endl;    std::cout.rdbuf (outbuf);//结束重定向}

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客