MATLAB Coder 中的多态性
Posted
技术标签:
【中文标题】MATLAB Coder 中的多态性【英文标题】:Polymorphism in MATLAB Coder 【发布时间】:2015-08-27 19:58:41 【问题描述】:在 MATLAB 中,从 matlab.mixin.Heterogeneous
继承基类将允许很好的多态性。但是,Coder 似乎不支持此功能。首先,谁能确认 Coder 不能使用 matlab.mixin.Heterogeneous,如果不能,有没有人有好的解决方法?
例如,我有一个称为 Shape 的 ABC 的常规设置,它源自句柄和 matlab.mixin.Heterogeneous。然后我有从形状派生的矩形和圆形。我希望能够有一个像这样的数组:
classdef Shape < handle & matlab.mixin.Heterogeneous
classdef Circle < Shape
classdef Rectangle < Shape
harray = [Rectangle(height, width), Circle(radius)];
在Matlab中,harray变成了一个类型“1x2 heterogeneous Shape (Rectangle, Circle) array
”
在 Coder 中,我在构建过程中收到错误“Base class 'matlab.mixin.Heterogeneous' cannot be loaded.
”。
有什么想法可以解决这个问题吗?在我做一些疯狂的事情之前,我只是想检查一下我是否遗漏了一些明显的东西。
【问题讨论】:
【参考方案1】:您是正确的,matlab.mixin.Heterogeneous
不支持代码生成。我向 MATLAB Coder 团队报告了您使用它的愿望以及不明确的错误消息。
对象数组是 not supported 用于代码生成(请参阅该链接中的项目符号 3)。如果你尝试:
[Circle(1), Circle(1)]
你会得到一个错误说明这个事实:
???代码生成不支持对象数组。
如果没有这种支持,matlab.mixin.Heterogeneous
在代码生成中可能不会有太多实用性。
【讨论】:
谢谢。是的,我的问题实际上混合了两个问题:对象数组和异构对象类型。在某些情况下,单个异构对象会非常有用。我对此的解决方案是制作一个自动生成的“组合器”类,在不同的类之间进行内部切换。让 Coder 支持这一点将是一个非常好的功能。 @Tony 当您说“单个异构对象”时,您的意思是您希望能够将派生类分配给基类变量,然后根据运行时类型进行动态分派吗?同样,您是否希望能够将派生对象传递给采用基础对象的函数?还是我没有抓住重点? 完全正确。例如,我有一个通用文件阅读器的 ABC,然后为每种文件格式派生了多个子类。我希望能够调用实例化类的方法,并根据我实例化的类将其分派到正确的实现,但所有调用都将保持不变。我目前通过一个“聚合”类来做到这一点,这正是你想象的混乱的 switch 语句,但封装了每个派生类的实例。 谢谢@Tony,我也记下了。以上是关于MATLAB Coder 中的多态性的主要内容,如果未能解决你的问题,请参考以下文章
MATLAB R2014b 中的 MATLAB Coder 和 parfor
具有外部 C++ 函数的 Matlab:coder.ceval 将结构传递给函数