Question

Existe-t-il un meilleur moyen de mettre en oeuvre un constructeur de copie pour matlab pour une classe dérivée du handle, autre que d'ajouter un constructeur avec une entrée et de copier explicitement ses propriétés?

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

etc.

Merci, Dani

Était-ce utile?

La solution

Si vous souhaitez une solution rapide qui suppose que toutes les propriétés peuvent être copiées, jetez un coup d’œil à la fonction PROPERTIES. Voici un exemple de classe qui copie automatiquement toutes les propriétés:

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

et du code de test:

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

Autres conseils

Il existe un autre moyen simple de créer des copies d’objets handle en utilisant matlab.mixin.Copyable. Si vous héritez de cette classe, vous obtiendrez une méthode de copie qui copiera toutes les propriétés pour vous.

classdef YourClass < matlab.mixin.Copyable
...

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

Cette méthode de copie crée une copie sans appeler de constructeurs ni définir de fonctions de propriétés. Donc, cela devrait être plus rapide. Vous pouvez également personnaliser le comportement de copie en remplaçant certaines méthodes.

Vous pouvez même utiliser

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

ce qui rend la méthode plus utile

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top