获取类对象的指针

时间:2016-12-03 18:04:52

标签: matlab class oop pointers object

我有一个由我自己的类在MATLAB中创建的对象apple

apple = classA();

该课程如下:

classdef classA < handle

   properties
       color = 'red';
   end

   methods
      function obj = classA()
          % ...
      end
   end
end

问题:如何获取对象或处理apple的指针?我想通过它们的属性搜索对象,例如:

isprop(eval(mat(i).name),'color')

mat = whos。所以我需要获取对象的指针,由结构mat(i).name表示。我只需要引用,而不是所需对象的副本。目的是:

如果我以某种方式得到指针,比如

ptr_to_apple_object = get_pointer_fct( mat(i).name )

然后我可以更改apple - 对象的属性,如:

ptr_to_apple_object. color = 'yellow'

你有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:3)

找到特定类的所有当前对象真的没有好方法,但是你可以使用whos来获取关于所有变量的结构,循环遍历这个并确定哪些具有你的属性然后修改< / p>

variables = whos;

for k = 1:numel(variables)
    obj = eval(variables(k).name);

    if isobject(obj) && isprop(obj, 'color')
        obj.color = 'yellow'; 
    end
end

如果您要查找特定课程,可以使用class

输出的whos字段
is_class = ismember({variables.class}, 'classA');
instances = variables(is_class);

for k = 1:numel(instances)
    obj = eval(instances(k).name);
    obj.color = 'yellow';
end

<强>更新

由于您是handle的子类,当您将实例分配给新变量(上面的obj = val(variables(k).name))时,它不会创建实例的副本,而是创建对同一对象的新引用

b = classA;
c = b;

b.color = 'red';

c.color
%   'red'