MATLAB c++库类方法不返回数组类型,即使“ReturnCArrays”设置为false时clibgen生成库定义文件

4视图(30天)
你好,
我想要实例化一些MATLAB c++类(使用 clib clibgen 包),而且有一些困难在试图调用一些方法应该返回一个数组类型MATLAB MATLAB。
实际上,默认情况下,c++方法返回一个指针指向一个数组,或者一个 std::向量 返回原始类型的MATLAB的类型 clib.array。*。* ,这是:
  • 非常不方便,当有人想做一些进一步的处理在MATLAB与返回的数组中
  • 迫使我丢给MATLAB原始类型数组和转置,如果产量预计将一个列向量。
出于这个原因,我组 “ReturnCArrays” 假当该值生成库定义文件 clibgen.generateLibraryDefinition () 。然而生成的库定义还定义了一个返回的数组类型 clib.array。*。* 像预期的那样(而不是一个MATLAB数组)。
这是一个小例子,演示了这个问题:
在MATLAB的测试脚本
%生成库定义
clibgen.generateLibraryDefinition (“test.hpp”,
“PackageName”,“testPackage”,
“ReturnCArrays”假的,
“详细”,真正的);
%建立接口
构建(definetestPackage);
目录testPackage /;
%实例化虚拟对象
myObj = clib.testPackage.TestClass ();
%调用测试方法
myVec = myObj.createSuperVector ();
% myVec返回为“clib.array.testPackage.Double”
%我可以做什么,但要避免:
% > myVec =双(myVec (:));
c++类定义(test.hpp)
#包括向量> <
TestClass {
公众:
TestClass () {};
~ TestClass () {};
<二> createSuperVector std::向量(){
/ /实例化一个3元素向量和值1.234
<二> superVector std::向量(1.234);
返回superVector;
}
};
注意,如果该方法 createSuperVector () 定义返回一个双*,参数 “ReturnCArrays” 设置为false的工作和双阵列(MATLAB类型)是回到了MATLAB。
有人可能会说我可以重写我的c++库,方法返回一个 双* 然而,我明白,输出数组的尺寸必须定义的 .mlx 库定义文件(作为固定值或通过使用方法参数名称, 如。 (“兰”,1) 的一个列向量 len 元素)。
所以,对于输出大小不固定,我不得不定义方法
常量双* createSuperArray (int len) {
* superArray = new superArray [someObjectAttributeThatDefinesTheSize];
/ /一些代码
返回superArray;
}
和修改 .mlx 库定义文件:
defineOutput (createSuperArrayDefinition“RetVal”,“替身”,(“兰”,1]);
然后,在MATLAB中,用户需要调用该方法
勒= 3;
myArr = myObj.createSuperArray (len);
%(!)非常危险——>凹陷。故障如果用户不知道他在做什么
这是很丑陋的和危险的,用户应该确保输入参数 len 等于的价值 someObjectAttributeThatDefinesTheSize。
有人知道如何返回一个数组(MATLAB类型的) 向量<双> 方法?如果是这样,将它然后可以概括 矢量< <二> >的方法 吗?另外的情况下 双* 方法,可以使用其他变量不止一个方法的参数( 如。 c++对象的一个属性)设置输出数组的维度的功能 defineOuput () .mlx 文件吗?
棘手的问题:对不起)我希望我只是太累了,解决方法是明显的…
非常感谢!
FZ

答案(0)

社区寻宝

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

开始狩猎!