`

matlab的mexFunction中使用std::cout(部分转载)

阅读更多
在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);//结束重定向

}
分享到:
评论

相关推荐

    matlab最简单的代码-mexFunction_CppPrimer:将mexFunction用于C++函数和对象的入门

    matlab最简单的代码mexFunction_CppPrimer Matlab的mexFunction C语言入门 这组示例包含面向初学者的简单易懂的C / C ++ mexFunction。 如果您正在寻找如何从Matlab的mexFunction调用简单的C函数和类,那么您来对...

    matlab中调用C代码.pdf

    在 mexFunction 中,我们需要根据 Matlab 中的调用语句来确定四个参数的值。nlhs 表示调用语句左手面的变量数,nrhs 表示调用语句右手面的自变量数。plhs 和 prhs 都是指针数组,plhs 指向结果,prhs 指向自变量。 ...

    用matlab调用c程序下载

    在 Matlab 中,可以使用 `mex` 命令编译 C 代码生成 MEX 文件,然后使用该文件就像使用 Matlab 函数一样。例如,编写一个 `add.c` 文件,其中定义了一个 `add` 函数,然后使用 `mex` 命令编译该文件生成 `add.mexw32...

    Matlab调用C语言函数.docx

    在 mexFunction 中,nlhs 表示 Matlab 调用函数的左手面(lhs)中的变量数,nrhs 表示右手面(rhs)中的变量数。plhs 和 prhs 是指针数组,plhs 指向 Matlab 的输出结果,而 prhs 指向 Matlab 的输入参数。 例如,...

    Matlab以MEX方式调用C源代码

    为了在 Matlab 中使用这个函数,我们需要创建一个 MEX 文件。这涉及到以下几个步骤: 1. **定义 C 函数**:在 `add.c` 文件中定义 `add` 函数。 2. **实现 mexFunction 函数**:在同一个文件中添加一个 `...

    Vc++下如何利用Matlab工具箱进行数字信号处理

    std::cout &lt;&lt; "Output data point " &lt;&lt; i &lt;&lt; ": " [i] &lt;&lt; std::endl; } mxDestroyArray(inputArray); mxDestroyArray(outputArray); return 0; } ``` 此外,为了在VC++中实现与硬件的交互,可能还需要使用...

    c++和matlab调用DLL方法

    通常的做法是在头文件中声明这些函数,并且使用特殊的编译指令标记它们。 ##### 示例:创建一个简单的 DLL 假设我们需要创建一个名为 `MyDLL` 的 DLL,它包含一个名为 `Add` 的函数,该函数接收两个整数作为参数,...

    如何用Matlab和C++联合编译,使用心得

    3. **添加Matlab接口**:在C++代码中,使用`mxArray`和相关的Matlab库函数处理数据的输入和输出。例如,你可以使用`mxGetPr`和`mxGetN`获取双精度浮点数组,`mxCreateDoubleMatrix`创建新的矩阵,以及`mxMalloc`分配...

    c++调用Matlab函数画图

    首先,为了在C++中调用Matlab的功能,我们需要使用Matlab的MEX接口。MEX(MATLAB Executable)是Matlab提供的一种编译语言接口,允许我们用C++、C或Fortran等语言编写代码,并在Matlab环境中执行。 1. **安装和配置...

    matlab调用C++ 动态库实例

    在IT领域,跨语言编程是常见的需求,特别是在数据分析和科学计算中,MATLAB与C++的结合使用可以发挥各自的优势。本实例展示了如何利用MATLAB调用C++编写的动态链接库(DLL),以实现高性能计算。下面我们将详细探讨...

    matlab中调用C代码.docx

    在 Matlab 中使用 MEX 文件的优点是,它可以提高计算速度和效率,特别是在处理大规模数据时。同时,MEX 文件也可以帮助我们avoid重复编写代码,因为我们可以使用 C 语言编写的函数来实现复杂的计算,然后在 Matlab ...

    C++和MATLAB混合编程

    - 建议使用MATLAB的`mex`命令行工具进行编译,这样可以在MATLAB环境中直接加载并测试MEX文件。 - 一旦MEX文件编译成功,可以在MATLAB中调用它,检查输出是否符合预期,进行功能性和性能上的测试。 总结: C++与...

    Matlab笔记——使用GPU运算、调用C/C++程序、常见问题及解决

    ### MATLAB 2010b 中使用 GPU 运算 #### GPUArray 在 MATLAB 中的应用 在 MATLAB 中,`GPUArray` 类表示存储在图形处理器 (GPU) 上的数据。使用 `gpuArray` 函数可以轻松地将数据从 MATLAB 工作空间传输到 GPU,...

    matlab.rar_c 和MATLAB

    - MATLAB界面:包括命令窗口、工作空间、历史记录、编辑器和调试器等部分。 - MATLAB语法:支持向量和矩阵运算,语法简洁,易于理解。 - 数据类型:包括标量、向量、矩阵、数组、结构体、细胞数组等。 - 基本...

    Matlab添加VS2013编译器

    在MATLAB环境中,为了能够编译C/C++代码或者扩展MATLAB的功能,我们需要配置合适的编译器。在本例中,我们将讨论如何在MATLAB中添加Visual Studio 2013(VS2013)作为编译器。这个过程对于开发MATLAB外部接口、MEX...

    MATLAB的一些应用程序接口 简单例子的代码,包括C、JAVA、Fortran语言.zip

    本压缩包包含了一些关于如何在这些语言中使用MATLAB API的简单示例代码。 1. **MATLAB C API**: - `mexFunction`:这是C语言中与MATLAB交互的核心函数,用于构建MATLAB的MEX文件(MATLAB可执行扩展)。MEX文件是...

    matlab生成DXF文件 矢量图 DXFLib库

    在MATLAB中使用DXFLib,首先需要在你的系统上安装DXFLib库。这通常涉及下载源代码,编译并链接到MATLAB的工作环境中。确保你的MATLAB支持C++编译器,并按照DXFLib的官方文档进行配置。 2. **创建MEX文件**: 创建...

    vc与matlab的混合编程实例代码

    在`mexFunction`中,你可以调用MATLAB引擎API来执行MATLAB代码,或者将数据从C++传递到MATLAB,反之亦然。 4. **MATLAB引擎API**: MATLAB引擎API是一组C/C++函数,用于在外部程序中启动MATLAB,执行脚本、函数,...

    VC++ 和matlab编程

    2. 使用mexFunction:在C/C++代码中,定义`mexFunction`作为入口点,它会处理MATLAB的输入和输出。 3. 编译和链接MEX文件:使用MATLAB的mex命令编译和链接代码,生成MEX文件。 4. 在MATLAB中测试MEX文件:在MATLAB...

Global site tag (gtag.js) - Google Analytics