【问题标题】:Get pointer of class object获取类对象的指针
【发布时间】:2017-04-18 11:09:54
【问题描述】:

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

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。所以我需要得到对象的指针,用structmat(i).name表示。我只需要参考,而不是所需对象的副本。目的是这样的:

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

ptr_to_apple_object = get_pointer_fct( mat(i).name )

然后我可以更改apple-object 的属性,例如:

ptr_to_apple_object. color = 'yellow'

你有什么想法吗?谢谢。

【问题讨论】:

  • MATLAB 中没有“指针”,所以您只想找到所有指向具有特定属性的对象的变量吗?
  • 我只需要参考来做这样的事情:'ptr.color = 'blue''。但ptr 是指向apple 对象的指针或引用,我正在尝试查找。
  • MATLAB 没有指针。此外,当它编译为 java 时,它甚至不会编译为具有指针的语言。
  • @EliSadoff 什么?它不能编译成 Java...
  • @EliSadoff 只有图形是基于 Java 的,其余的使用 C/C++/Fortran 运行。

标签: matlab class oop pointers object


【解决方案1】:

确实没有找到特定类的所有当前对象的好方法,但是您可以使用whos 来获取有关所有变量的结构,遍历它并确定哪些具有您的属性然后修改

variables = whos;

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

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

如果您要查找特定类,可以使用whos 输出的class 字段

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'  

【讨论】:

  • 这基本上是我到目前为止所做的,但我认为这会在工作区中创建我的对象 (apple) 的副本 (obj)。
  • @Lemonbonbon 您使用的是handle 类,因此没有副本,它们都引用同一个对象
  • 啊,好吧。我不知道。
猜你喜欢
  • 1970-01-01
  • 2011-07-20
  • 2017-06-29
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
相关资源
最近更新 更多