在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函数和类,那么您来对...
出错提示:Cannot open include file: 'mex.h': No such file or directory 和 Cannot open include file: 'matrix.h': No such file or directory 解压后,放在当前工程文件夹下,或编译器的include文件夹下即可。
Matlab中矩阵预算特别方便,但如果有无法避免的循环甚至多层嵌套的话,会非常影响程序的效率,因此通常会将这种需要大量循环的模块用c++编写然后在matlab中调用。Matlab中的的c++编程称为mex编程(matlab executive)...
任何使用mexFunction符号和正确的文件扩展名与libmex或liboctave链接的共享对象库都可以作为 mex 函数调用。 对于这个 rust/mex 示例,我们只需创建一个 rust dylib 并将我们想要从 MATLAB/Octave 调用的 rust 代码...
生成多项式转网格图描述的built-in函数为poly2trellis,在MATLAB中,改函数为通信工具箱中的内置函数,被封装成动态链接库(MexFunction),通过搜索早期的MATLAB版本,找到了MEX源文件。 采用“还原”的形式进行...
*matlab调用C语言 * *1、定义matlab与mablab的接口函数mexFunction(),其输入和输出都不可改变 *2、使用mex命令在matlab命令行编译C文件 *3、在matlab上调用生成的.mexw64文件
基本上你应该遵循以下步骤: 1)准备原始.c文件2)在1)中加入“void mexFunction()”来描述输入/输出接口3)把这个.c文件和MATLAB脚本放在同一个文件夹中4) 在 MATLAB 中运行“mex $function_name.c” 5) 使用普通...
为避免 mexfunctions 中的代码重复,您可以使用此类将传递到 mexFunction 的 mxArray 数组转换为 c++ 本机数据类型。 到目前为止,已实现的每种方法都会检查mxArray是否具有所需的类型和大小以及是否存在。 我计划在...
这是一个网关函数,用于在 MATLAB 中使用 MJD Powell 的 BOBYQA 算法(BY Quadratic Approximation Bound Optimization)。 dlib ( http://dlib.net ) 的 C++ 实现被编译成一个 mex 函数来评估 MATLAB 目标函数。 ...
代替静态mexFunction()接口所隐含的过程工作流,可以交互使用MexIFace包装的类。 可以使用同一MEX模块独立创建和访问多个包装类型的对象。 每个实例化的对象都有其自己的持久状态。 当Matlab垃圾收集MexIFace对象时...
子程序 mexfunction(nlhs, plhs, nrhs, prhs) 使用 mod_mat ! 合并和使用 MATLAB 数据(mat* subs/functions)。 使用 mod_mx ! 创建和操作 MATLAB 数组(mx* 子/函数)。 使用 mod_mex ! 在 MATLAB 环境中执行...
4.之后大家可以任意编写.cpp文件(具体可参考网上的mexFunction编写),完成matlab的调用 错误集锦: 1.编译.cpp成功,然并没有生成.mexw64文件。(程序第14行,也就是include的路径,引号与-o之间是有空格符的...
4.之后大家可以任意编写.cpp文件(具体可参考网上的mexFunction编写),完成matlab的调用 错误集锦: 1.编译.cpp成功,然并没有生成.mexw64文件。(程序第14行,也就是include的路径,引号与-o之间是有空格符的...
(MEX文件是一种可在matlab环境中调用的C语言(或fortran)衍生程序,mex的编译结果实际上就是一个带输出函数mexFunction 的dll文件。) 所以这里提供BM3D的matlab代码,方便自行学习、查看、修改、快速实验。
2, how to call vc functions in matlab using mexfunction with detailed procedure;3,how to use matlab functions in c++ through comtool and other means, such as matcom.4,the api reference for matlab.you ...
这是一个用 C 编写的位反转算法,但这是一个 Matlab Mexfunction。 C源代码可以编译成Mex文件,可以在Matlab中使用。 可以使用 LCC 编译器或 Microsoft Visual Studio 编译器来编译源代码。
matlab开发-Simplifyingmexfunctions。我编写了一个包含在mexfunction文件中的类,以简化对mexfunction的处理。
为每个 MEX 函数设置 VS 项目(并在每两年一次的 MATLAB 更新中保持项目的完整性)很快变得很麻烦。 Visual Studio 的属性表功能为我们提供了一种将所有 MEX 项目设置保存在一个位置的简单方法。 Matlab_Mex_Build...
此文件是生成完毕的,解压后请将文件夹替换../dlib/matlab文件夹即可使用
生成的代码在 Linux (gcc) 和 Windows (Visual Studio C++) 中编译。 1.1版中的新功能,它为您编写了繁琐的输入和输出验证代码。 这样您就可以编写 MEX 文件,而无需手动编码对 mx* API 函数的调用。 它的灵感来自 ...