Вопрос

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

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

и т.д.

Спасибо, Дэни

Это было полезно?

Решение

Если вам нужно быстрое и беспроблемное решение, предполагающее, что все свойства могут быть скопированы, взгляните на функцию 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.Копируемый.Если вы наследуете от этого класса, вы получите метод copy, который скопирует все свойства для вас.

classdef YourClass < matlab.mixin.Copyable
...

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top