Matlabコピーコンストラクタ
-
05-07-2019 - |
質問
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
メソッドをより便利にする
所属していません StackOverflow