質問

1つの入力を持つコンストラクターを追加し、そのプロパティを明示的にコピーする以外に、ハンドル派生クラスのmatlabのコピーコンストラクターを実装するより良い方法はありますか?

obj.property1 = from.property1;  
obj.property2 = from.property2;

etc。

ありがとう、 ダニ

役に立ちましたか?

解決

すべてのプロパティをコピーできることを前提とする手っ取り早い解決策が必要な場合は、PROPERTIES関数をご覧ください。すべてのプロパティを自動的にコピーするクラスの例を次に示します。

classdef Foo < handle
  properties
    a = 1;
  end
  methods
    function F=Foo(rhs)
      if nargin==0
        % default constructor
        F.a = rand(1);
      else
        % copy constructor
        fns = properties(rhs);
        for i=1:length(fns)
          F.(fns{i}) = rhs.(fns{i});
        end
      end
    end
  end
end

およびいくつかのテストコード:

f = Foo(); [f.a Foo(f).a] % should print 2 floats with the same value.

他のヒント

matlab.mixin.Copyableを使用して、ハンドルオブジェクトのコピーを作成する別の簡単な方法があります。このクラスから継承する場合、すべてのプロパティをコピーするcopyメソッドを取得します。

classdef YourClass < matlab.mixin.Copyable
...

a = YourClass;
b = copy(a); % b is a copy of a

このcopyメソッドは、コンストラクターを呼び出したり、プロパティの関数を設定したりせずにコピーを作成します。したがって、これはより高速になります。一部のメソッドをオーバーライドすることにより、コピーの動作をカスタマイズすることもできます。

使用することもできます

try
 F.(fns{i}) = rhs.(fns{i});
end

メソッドをより便利にする

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top