2013-07-18 54 views
1

我知道可以生成描述枚舉的classdef .m文件,但是這會導致生成一堆文件並且會非常混亂。 我在尋找的是一種在「內存」中執行此操作的方式,而不生成任何文件。我知道我可以使用mexCallMatlab或mexEval函數在Matlab中創建簡單變量,但classdef似乎不適用於這些函數。如何在mex函數中在Matlab中創建Enum類型

+0

你看過[containers.Map](http://www.mathworks.com/help/matlab/ref/containers.mapclass.html)嗎?你究竟需要傳入和/或傳出mex代碼? – horchler

+0

[Java Collections](http://undocumentedmatlab.com/blog/using-java-collections-in-matlab/)可能是另一種可能性。 – horchler

+0

mex代碼需要根據外部模式自動生成Enum類型。 mex函數用於讀取文件中的數據,此時我們只是將枚舉值作爲字符串傳遞。 –

回答

2

我認爲containers.Map可能是你最好的選擇,儘管它遠不如基本枚舉那麼優雅。從文檔的一個例子:

keySet = {'Jan', 'Feb', 'Mar', 'Apr'}; 
valueSet = [327.2, 368.2, 197.6, 178.4]; 
mapObj = containers.Map(keySet,valueSet) 

你甚至可以傳遞對象到您的MEX代碼,而不是使用mexCallMatlabmexEval - 見mxGetPropertymxIsClass,例如,除others。我已成功爲RandStream對象完成此操作。

+0

你是說不可能做到我想要的東西,這是下一個最好的東西? –

+0

首先,我承認你無法獲得創建枚舉的自定義類,以您需要的方式工作 - 我沒有嘗試過。其次,關於這種不太優雅的觀點與這樣一個事實有關,即這個解決方案需要使用一個更復雜的類(至少內建一個),而不是簡單的枚舉所需要的類。結果對象應該以您需要的方式工作。 – horchler

相關問題