请注意
MATLAB®提供了一个使用现代c++语义和设计模式的APIMATLAB数据API.MathWorks建议使用此API创建MEX函数。有关更多信息,请参见c++墨西哥人的应用程序.
如果MEX函数必须在MATLAB R2017b或更早版本中运行,则必须使用矩阵C API函数。用C Matrix API构建的MEX函数支持所有c++语言标准。万博1manbetx本主题讨论在创建和使用MEX文件时要考虑的特定c++语言问题。
您可以在c++应用程序中使用MATLAB C代码示例。例如,请参见mexcpp.cpp
在c++类的例子,它包含C和c++语句。
说明:MATLAB c++源码示例使用。-. cpp
文件扩展名。扩展. cpp
是明确的,c++编译器可以识别的。其他可能的扩展包括.C
,.cc
,. cxx
.
要构建一个c++ MEX文件,输入:
墨西哥人文件名. cpp
在哪里文件名
是MATLAB路径上的源代码文件的名称。
您只能在与文件编译所用的MATLAB版本相同的系统上运行c++ MEX文件。
请勿使用mxFree
或mxDestroyArray
用于mex函数的类的c++析构函数中的函数。如果mex -函数抛出错误,MATLAB将清除mex -文件变量,如MEX文件中临时数组的自动清理.
如果发生导致对象超出作用域的错误,MATLAB将调用c++析构函数。直接在析构函数中释放内存意味着MATLAB和析构函数释放相同的内存,这可能会损坏内存。
使用cout
或c语言printf
函数在c++ MEX文件中不能正常工作。使用mexPrintf
函数来代替。
墨西哥人文件mexcpp.cpp
演示如何使用C语言的MEX文件的c++代码。这个例子使用了来自C Matrix API的函数。它使用成员函数、构造函数、析构函数和iostream
包含文件。
函数定义了一个类myData
与成员函数显示
和set_data
和变量v1
和v2
.它构造了一个对象d
类的myData
的初始化值v1
和v2
.然后,它集v1
和v2
并显示新值。最后,删除
操作符清除对象。
要构建这个示例,将文件复制到MATLAB路径,并在命令提示符类型下:
墨西哥人mexcpp.cpp
调用语法是mexcpp (num1, num2)
.
的mexatexit.cpp
示例演示了c++文件处理特性。将其与C代码示例进行比较mexatexit.c
,它使用mexAtExit
函数。
c++的例子使用了fileresource
类来处理文件打开和关闭函数。MEX函数调用该类的析构函数,析构函数关闭数据文件。当对数据文件执行操作时,此示例还会在屏幕上打印一条消息。然而,在这种情况下,执行的唯一C文件操作是写操作,流
.
构建mexatexit.cpp
MEX文件,复制文件到MATLAB路径和类型:
墨西哥人mexatexit.cpp
类型:
z ='for the c++ MEX-file';mexatexit (x) mexatexit (z)清晰mexatexit
将数据写入文件。将数据写入文件。
显示matlab.data
.
类型matlab.data
我的输入字符串为c++的mex -文件
C代码示例注册mexAtExit
函数在MEX文件清除时执行清理任务(关闭数据文件)。下面的示例在屏幕上打印一条消息mexPrintf
执行文件操作时打开外部文件
,流
,文件关闭
.
构建mexatexit.c
MEX文件,复制文件到MATLAB路径和类型:
墨西哥人mexatexit.c
运行示例。
x =“我的输入字符串”;mexatexit (x)
matlab.data打开文件。将数据写入文件。
清除MEX文件。
清晰的mexatexit
matlab.data关闭文件。
显示matlab.data
.
类型matlab.data
我的输入字符串