【发布时间】:2019-05-09 19:17:51
【问题描述】:
我们在 MATLAB 中使用类,这些类被传递到一些 C Mex 函数中。之前我们传递的类对象都是同类型的,所以我们可以使用mxIsClass来验证对象的类型是否正确。
然而,我们改变了架构,现在对象从原始基类派生,以允许定制。实际上,我们有类似的东西:
handle & mixin.Heterogeneous>
BaseClass >
Class1
Class2
因为基类使用 mixin.Heterogeneous,如果我传递像 [Class1_obj Class2_obj] 这样的数组,mex 函数会按预期工作 - MATLAB 将数组视为 BaseClass 类型的数组,mxIsClass(obj, 'BaseClass') 返回 true。
当我们将单个对象或同一派生类的数组(例如[Class1_obj1 Class1_obj2])传递给 mex 函数时,就会出现问题。因为它们是同一类型,MATLAB 将数组视为类型 Class1,因此 mxIsClass(obj, 'BaseClass') 返回 false,因为它只考虑对象的类,而不考虑它派生自的类。
我正在尝试找出是否有办法解决这个问题,并确保 mex 函数中的 mxArray* 对象要么直接是 BaseClass,要么派生自它。
我考虑过简单地为每个已知的派生类名称添加检查,但这似乎是一种丑陋的做法,尤其是因为如果我们添加更多派生类,我们每次都需要更改 mex 函数。
我想我可以使用 mexCallMATLAB 函数在 MATLAB 中调用 isa,它应该可以正确识别它是一个基类。
我还想知道是否有办法让 MATLAB 将对象传递给 Mex 函数,将其视为 BaseClass 对象而不是派生类。
是否有实现此目标的标准方法?
【问题讨论】: