主要内容

管理外部资源从墨西哥人的功能

墨西哥人的函数连接到外部资源(如插座、传感器、文件和数据库需要管理这些资源。因为你实现c++墨西哥人作为类,您可以定义构造函数和析构函数来管理这些资源和变量保存在重复调用墨西哥人的功能。

当你调用一个墨西哥人函数,MATLAB®创建的一个实例MexFunction类。这个对象持续MATLAB会话或直到你清晰的对象清晰的墨西哥人命令。重复调用墨西哥人函数可以处理传入的数据并在完成时释放资源。

读取一个文本文件

这个墨西哥人函数打开一个文本文件,读取一个词每次调用这个函数。的MexFunction类实现了墨西哥人的函数定义了一个构造函数和析构函数打开和关闭文件。每个单词读存储在一个std:: unordered_map确定文件中这个词出现的次数。

构造函数

MexFunction构造函数执行这些步骤:

  • 调用mexLock为了防止清算墨西哥人函数的内存。

  • 从MATLAB得到的文本文件的完整路径evalgetVariable

  • 打开文本文件std:: ifstream输入流。

析构函数

类的析构函数关闭文件。

函数调用操作符()

每个函数调用墨西哥人从文本文件中读取一个单词,并将其添加到无序的地图,或者只是增加词的字数是否存在于地图上。墨西哥人函数显示当前单词及其MATLAB命令窗口中使用std:: ostringstream输出流。打开墨西哥人功能,通过一个参数(如“解锁”)功能。

显示在MATLAB

displayOnMATLAB成员函数使用函数宏指令调用MATLAB函数的字符串写入到输出流。

代码清单

# include”墨西哥人。hpp mexAdapter # include。高压泵”# include < unordered_map >使用matlab # include < fstream >::墨西哥人::ArgumentList;使用名称空间matlab::数据;类MexFunction:公共matlab::墨西哥人::函数{/ /从文件输入流读单词std:: ifstream inFile;/ /无序地图跟踪字数std:: unordered_map < std:: string、int > wordCount;/ /指针MATLAB引擎std::要查看< matlab::引擎::MATLABEngine > matlabPtr = getEngine ();/ /工厂创建MATLAB数据数组ArrayFactory工厂;公众:MexFunction () {mexLock ();matlabPtr - > eval (u“帧= fullfile (matlabroot,“例子”,matlab, sonnets.txt);”);matlab::数据::CharArray文件名= matlabPtr - > getVariable (u“帧”);inFile.open (fileName.toAscii ());如果(! inFile.is_open ()) {std:: ostringstream流;< <“未能开放的十四行诗。txt”< < std:: endl;displayOnMATLAB(流);}}~ MexFunction(){如果(inFile.is_open ()) inFile.close ();}空白符()(ArgumentList输出,ArgumentList输入){如果(inFile.is_open () & & ! inFile.eof ()) {std:: string词; inFile >> word; wordCount[word]++; std::ostringstream stream; stream << "Read : " << "\"" << word << "\"" << ", current count: " << wordCount[word] << std::endl; displayOnMATLAB(stream); } if (!inputs.empty() || !inFile.is_open()) { mexUnlock(); } } void displayOnMATLAB(const std::ostringstream& stream){ matlabPtr->feval(u"fprintf", 0, std::vector({ factory.createScalar(stream.str()) })); } };

构建和运行sonnetWordCount.cpp

开放源代码文件,sonnetWordCount.cpp在编辑器中,并使用墨西哥人命令来编译墨西哥人的功能。

墨西哥人sonnetWordCount.cpp

墨西哥人的函数调用多次计算词的使用。

> > sonnetWordCount写道:“的”,目前数:1> > sonnetWordCount写道:“十四行诗”,目前数:1> > sonnetWordCount写道:“通过”,目前数:1> > sonnetWordCount写道:“威廉”,目前数:1> > sonnetWordCount写道:“莎士比亚”,目前数:1> > sonnetWordCount (“解锁”)

另请参阅

相关的话题