如何在Matlab中创建指向对象的指针数组?

时间:2017-09-15 18:38:09

标签: arrays matlab pointers object

我正在编写一个Matlab脚本,其中我有一堆同一个自定义类的对象,比如ABC。然后我有一个函数可以处理2个对象中的任何一个,比如func(A,B)

现在我要选择一个对象,比如说A,然后通过所有其他对象选择func(A,x)。所以基本上实现了这样的目标:

func(A,B)
func(A,C)
A.update()

func(B,A)
func(B,C)
B.update()

...

所以我需要创建一个包含所有可以遍历的对象的数组,当然也要排除它自己。我尝试用单元格数组来做,所以我有:

AllObjs = {A,B,C}
for i=1:length(AllObjs)
  if ~isequal(A, AllObjs{i})
    func(A, AllObjs{i})
  end
end
A.update()

但是,更新A后,A中的AllObjs无法获得更新。因此,对于下一个循环,我必须创建一个包含所有对象的新数组。它在这个简单的例子中是可行的,但是当对象在别处更新时是不可管理的。所以我希望有一个指向所有对象的指针数组。我的Google搜索告诉我Matlab中没有指针,但有没有办法实现我想要做的事情?

1 个答案:

答案 0 :(得分:4)

我怀疑(很难看到你的代码)你的A,B和B级课程。 C不从句柄继承。

采取以下示例:

classdef noHandle
  properties
    name = '';
  end
  methods
    function obj = noHandle ( name )
      obj.name = name;
    end
  end
end

A = noHandle ( 'A' );
B = noHandle ( 'B' );
C = noHandle ( 'C' );
allObjs = { A B C }
allObjs{1}.name   % check its name is "A"
% change the name of A
A.name = 'AAA'
allObjs{1}.name   % see that allObjs{1} is still A.

但是如果你这样做:

classdef fromHandle < handle
  properties
    name = '';
  end
  methods
    function obj = fromHandle ( name )
      obj.name = name;
    end
  end
end

然后做:

A = fromHandle ( 'A' );
B = fromHandle ( 'B' );
C = fromHandle ( 'C' );
allObjs = { A B C }
allObjs{1}.name   % check its name is "A"
% change the name of A
A.name = 'AAA'
allObjs{1}.name   % see that allObjs{1} is updated to AAA.