2011-06-22 7 views
4

MATLAB containers.Mapのキー値としてMATLAB handle objectsを使用しようとしているときに問題が発生します。MATLABハンドルオブジェクトのIDを取得する方法は?

ld(h1, h2)は、ハンドルオブジェクトに対して線形の順序を定義します。したがって、ハンドルオブジェクトをマップのキー値として使用することに制限はありませんが、整数型または文字列型のみが許可されます。

この問題の回避策は、ハンドルオブジェクト(実際にはld関数で比較されている)の実際のID(アドレス)を取得することです。

問題は、ハンドルオブジェクトのIDを取得する方法です。回避策は、静的メンバ関数で永続変数を使用してを行うことができることが分かった


この場合、すべてのクラスを次のような基本クラスから継承する必要があります。私は、Java/C#でオブジェクトHashCodeのようなものを聞いたことがない

classdef object < handle 
properties (GetAccess = 'public', SetAccess = 'private') 
    id 
end 

methods (Access = 'protected') 
    function obj = object() 
     obj.id = object.increment(); 
    end 
end 

methods (Static, Access = 'private') 
    function result = increment() 
     persistent stamp; 
     if isempty(stamp) 
      stamp = 0; 
     end 
     stamp = stamp + uint32(1); 
     result = stamp; 
    end 
end 

エンド

+0

おそらく 'ld'ではなく' lt'という関係演算子、つまり 'lower'を意味しますか? – Mikhail

+0

はいミハイル、それはタイプミスです。 – Vahagn

答えて

1

は、MATLAB OOに適用されます。 MATLABオブジェクトのアドレス(コマンドウィンドウでformat debugと入力した場合)は、C++とは異なり、システム(管理対象メモリ)によって移動されるため、使用するのは依然として妥当ではありません。

MATLABオブジェクトに手動でインターフェイスgetHashCode()を実装することができます。従来のハッシュコードとは異なり、ハッシュコードはで、常にがオブジェクトごとに異なることを確認する必要があります。単純なタスクではありません。

MATLABデフォルト比較関数sortは明らかにオブジェクトのハッシュコードを内部的に使用していますが、ここでは役立たないでしょう。オブジェクトの比較は、実際にはハッシュコードの直交概念です。

関連する問題