2015-08-27 35 views
1

在MATLAB中,從基類繼承matlab.mixin.Heterogeneous將允許很好的多態性。但是,Coder不支持這種情況。首先,任何人都可以確認編碼器不能使用matlab.mixin.Heterogeneous,如果沒有,有沒有人有一個很好的解決方法?例如,我有一個名爲Shape的ABC的通常設置,它來自handle和matlab.mixin.Heterogeneous。然後我有從形狀派生的矩形和圓形。我希望能有一個數組,如:MATLAB編碼器中的多態性

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

在編碼器,我在生成過程中出現錯誤「Base class 'matlab.mixin.Heterogeneous' cannot be loaded.」。

任何想法如何接近?在我做一些瘋狂的事情之前,我只想檢查是否有什麼明顯的我失蹤。

回答

1

代碼生成不支持matlab.mixin.Heterogeneous。我向你報告了使用它的願望以及不清楚的錯誤信息給MATLAB編碼器團隊。

代碼生成的對象數組是not supported(請參閱該鏈接的第3項)。如果你嘗試:

[Circle(1), Circle(1)] 

,你會得到一個錯誤,指出一個事實:

???代碼生成不支持對象數組。

matlab.mixin.Heterogeneous如果沒有這種支持,在代碼生成中可能沒有多少用處。

+0

謝謝。是的,我的問題確實混合了兩個問題:對象數組和異構對象類型。在某些情況下,單個異構對象會非常有幫助。我的解決方案是製作一個自動生成的「組合器」類,可以在不同的類之間進行內部切換。編碼器支持這將是一個非常好的功能。 – Tony

+0

@Tony當你說「單一異構對象」時,你的意思是你希望能夠將派生類分配給基類變量,然後根據運行時類型進行動態分派?同樣,你是否希望能夠將派生對象傳遞給一個帶有基礎對象的函數?或者我錯過了這一點? –

+0

這完全正確。例如,我有一個通用文件閱讀器的ABC,然後爲每個文件格式導出多個子類。我希望能夠調用實例化類的方法,並根據我實例化哪個類來派發到正確的實現,但所有調用都保持不變。我目前通過一個「聚合」類來實現這一點,這正是你想象的switch語句的混亂,但是封裝了每個派生類的實例。 – Tony