Конструктор копирования Matlab - PullRequest
6 голосов
/ 29 октября 2008

Есть ли лучший способ реализовать конструктор копирования для matlab для производного класса дескриптора, кроме добавления конструктора с одним вводом и явного копирования его свойств?

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

и т.д.

Спасибо, Dani

Ответы [ 3 ]

9 голосов
/ 23 апреля 2013

Существует еще один простой способ создания копий объектов-дескрипторов с помощью matlab.mixin.Copyable. Если вы наследуете от этого класса, вы получите метод copy, который скопирует все свойства для вас.

classdef YourClass < matlab.mixin.Copyable
...

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

Этот метод копирования создает копию без вызова конструкторов или установки функций свойств. Так что это должно быть быстрее. Вы также можете настроить поведение копирования, переопределив некоторые методы.

8 голосов
/ 29 октября 2008

Если вы хотите быстрое и грязное решение, которое предполагает копирование всех свойств, взгляните на функцию СВОЙСТВА. Вот пример класса, который автоматически копирует все свойства:

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.
2 голосов
/ 19 ноября 2009

Вы даже можете использовать

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

, что делает метод более полезным

...