MATLAB Coder 中的多态性

Polymorphism in MATLAB Coder

在 MATLAB 中,从 matlab.mixin.Heterogeneous 继承基数 class 将允许很好的多态性。但是,这似乎在 Coder 中不受支持。首先,谁能确认 Coder 不能使用 matlab.mixin.Heterogeneous,如果不能,有人有好的解决方法吗?

例如,我有一个名为 Shape 的 ABC 的常用设置,它是从 handle 和 matlab.mixin.Heterogeneous 派生的。然后我有从 Shape 派生的 Rectangle 和 Circle。我希望能够有一个像这样的数组:

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.”。

知道如何解决这个问题吗?在我做一些疯狂的事情之前,我只想检查一下我是否遗漏了一些明显的东西。

您说得对,matlab.mixin.Heterogeneous 不支持代码生成。我向 MATLAB Coder 团队报告了您使用它的愿望和不清楚的错误消息。

对象数组 not supported 用于代码生成(请参阅项目符号 3 link)。如果您尝试:

[Circle(1), Circle(1)]

您会收到一条错误消息,说明该事实:

??? Arrays of objects are not supported for code generation.

如果没有此类支持,

matlab.mixin.Heterogeneous 可能不会在代码生成中发挥太大作用。