在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 Matlab的mexFunction C语言入门 这组示例包含面向初学者的简单易懂的C / C ++ mexFunction。 如果您正在寻找如何从Matlab的mexFunction调用简单的C函数和类,那么您来对...
在 mexFunction 中,我们需要根据 Matlab 中的调用语句来确定四个参数的值。nlhs 表示调用语句左手面的变量数,nrhs 表示调用语句右手面的自变量数。plhs 和 prhs 都是指针数组,plhs 指向结果,prhs 指向自变量。 ...
在 Matlab 中,可以使用 `mex` 命令编译 C 代码生成 MEX 文件,然后使用该文件就像使用 Matlab 函数一样。例如,编写一个 `add.c` 文件,其中定义了一个 `add` 函数,然后使用 `mex` 命令编译该文件生成 `add.mexw32...
在 mexFunction 中,nlhs 表示 Matlab 调用函数的左手面(lhs)中的变量数,nrhs 表示右手面(rhs)中的变量数。plhs 和 prhs 是指针数组,plhs 指向 Matlab 的输出结果,而 prhs 指向 Matlab 的输入参数。 例如,...
为了在 Matlab 中使用这个函数,我们需要创建一个 MEX 文件。这涉及到以下几个步骤: 1. **定义 C 函数**:在 `add.c` 文件中定义 `add` 函数。 2. **实现 mexFunction 函数**:在同一个文件中添加一个 `...
std::cout << "Output data point " << i << ": " [i] << std::endl; } mxDestroyArray(inputArray); mxDestroyArray(outputArray); return 0; } ``` 此外,为了在VC++中实现与硬件的交互,可能还需要使用...
通常的做法是在头文件中声明这些函数,并且使用特殊的编译指令标记它们。 ##### 示例:创建一个简单的 DLL 假设我们需要创建一个名为 `MyDLL` 的 DLL,它包含一个名为 `Add` 的函数,该函数接收两个整数作为参数,...
3. **添加Matlab接口**:在C++代码中,使用`mxArray`和相关的Matlab库函数处理数据的输入和输出。例如,你可以使用`mxGetPr`和`mxGetN`获取双精度浮点数组,`mxCreateDoubleMatrix`创建新的矩阵,以及`mxMalloc`分配...
首先,为了在C++中调用Matlab的功能,我们需要使用Matlab的MEX接口。MEX(MATLAB Executable)是Matlab提供的一种编译语言接口,允许我们用C++、C或Fortran等语言编写代码,并在Matlab环境中执行。 1. **安装和配置...
在IT领域,跨语言编程是常见的需求,特别是在数据分析和科学计算中,MATLAB与C++的结合使用可以发挥各自的优势。本实例展示了如何利用MATLAB调用C++编写的动态链接库(DLL),以实现高性能计算。下面我们将详细探讨...
在 Matlab 中使用 MEX 文件的优点是,它可以提高计算速度和效率,特别是在处理大规模数据时。同时,MEX 文件也可以帮助我们avoid重复编写代码,因为我们可以使用 C 语言编写的函数来实现复杂的计算,然后在 Matlab ...
- 建议使用MATLAB的`mex`命令行工具进行编译,这样可以在MATLAB环境中直接加载并测试MEX文件。 - 一旦MEX文件编译成功,可以在MATLAB中调用它,检查输出是否符合预期,进行功能性和性能上的测试。 总结: C++与...
### MATLAB 2010b 中使用 GPU 运算 #### GPUArray 在 MATLAB 中的应用 在 MATLAB 中,`GPUArray` 类表示存储在图形处理器 (GPU) 上的数据。使用 `gpuArray` 函数可以轻松地将数据从 MATLAB 工作空间传输到 GPU,...
- MATLAB界面:包括命令窗口、工作空间、历史记录、编辑器和调试器等部分。 - MATLAB语法:支持向量和矩阵运算,语法简洁,易于理解。 - 数据类型:包括标量、向量、矩阵、数组、结构体、细胞数组等。 - 基本...
在MATLAB环境中,为了能够编译C/C++代码或者扩展MATLAB的功能,我们需要配置合适的编译器。在本例中,我们将讨论如何在MATLAB中添加Visual Studio 2013(VS2013)作为编译器。这个过程对于开发MATLAB外部接口、MEX...
本压缩包包含了一些关于如何在这些语言中使用MATLAB API的简单示例代码。 1. **MATLAB C API**: - `mexFunction`:这是C语言中与MATLAB交互的核心函数,用于构建MATLAB的MEX文件(MATLAB可执行扩展)。MEX文件是...
在MATLAB中使用DXFLib,首先需要在你的系统上安装DXFLib库。这通常涉及下载源代码,编译并链接到MATLAB的工作环境中。确保你的MATLAB支持C++编译器,并按照DXFLib的官方文档进行配置。 2. **创建MEX文件**: 创建...
在`mexFunction`中,你可以调用MATLAB引擎API来执行MATLAB代码,或者将数据从C++传递到MATLAB,反之亦然。 4. **MATLAB引擎API**: MATLAB引擎API是一组C/C++函数,用于在外部程序中启动MATLAB,执行脚本、函数,...
2. 使用mexFunction:在C/C++代码中,定义`mexFunction`作为入口点,它会处理MATLAB的输入和输出。 3. 编译和链接MEX文件:使用MATLAB的mex命令编译和链接代码,生成MEX文件。 4. 在MATLAB中测试MEX文件:在MATLAB...