使用c++墨西哥人函数如何std:: string参数?

45视图(30天)
这似乎应该是简单的,但是我不能让它要么编译或运行时失败。基本上我需要的墨西哥人函数有两个参数都是字符串,并将通过c++函数里面。一个能告诉我如何从matlab::墨西哥人:ArgumentList输入,2 std:: string吗?我猜也从Matlab函数调用会是什么样子?
谢谢,

接受的答案

卡若拉Gurrath
卡若拉Gurrath 2019年1月30日
昨天我得到了同样的问题,这是我发现的解决方案。也许这不是最好的方式std:: string但我找不到别的……
matlab代码:
cellArray {1} =“string1”;
cellArray {2} =“string2相等”;
myMexFunction (cellArray);
myMexFunction:
使用名称空间matlab:数据;
使用matlab:墨西哥人::ArgumentList;
MexFunction:公共matlab::墨西哥人:函数
{
std::要查看< matlab::引擎::MATLABEngine > matlabPtr = getEngine ();
ArrayFactory工厂;
公众:
空白符()(ArgumentList输出,ArgumentList输入)
{
CellArray imageCell = std::移动(输入[0]);
TypedArrayRef < MATLABString > inArrayRef1 = imageCell [0];
std:: string string1 = std:: string (inArrayRef1 [0]);
TypedArrayRef < MATLABString > inArrayRef2 = imageCell [1];
std:: string string2相等= std:: string (inArrayRef2 [0]);
/ /做一些与string1和string2相等
}
}

答案(1)

崔
2022年8月10日
编辑: 2022年8月10日
matlab代码
input1 =“string1”;
input2 =“string2相等”;
myMexFunction (input1 input2);
墨西哥人c++代码
使用名称空间matlab:数据;
使用matlab:墨西哥人::ArgumentList;
MexFunction:公共matlab::墨西哥人:函数
{
std::要查看< matlab::引擎::MATLABEngine > matlabPtr = getEngine ();
ArrayFactory工厂;
公众:
空白符()(ArgumentList输出,ArgumentList输入)
{
std:: string string1 = std:: string(输入[0][0]);
std:: string string2相等= std:: string(输入[1][0]);
/ /或使用以下代码
/ / std:: string string1 =
/ / matlab::引擎::convertUTF16StringToUTF8String(输入[0][0]);
/ / std:: string string2相等=
/ / matlab::引擎::convertUTF16StringToUTF8String(输入[1][0]);
/ /做一些与string1和string2相等
}
}
在matlab input1/2参数是一个字符串标量,但它也代表1×1弦矩阵,
直接指定分类指数[0][0]在c++中。
顺便说一句,防止matlab崩溃错误的输入,最好有一个check-uphad
如果(输入[0]. gettype () ! = matlab::数据::ArrayType:: MATLAB_STRING) {
matlabPtr - >函数宏指令(u“错误”,
0,std::向量< matlab::数据::数组> ({factory.createScalar (“第一个输入必须字符串标量”}));
}

标签

s manbetx 845


释放

R2018b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!