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

LWZ*_*LWZ 5 arrays matlab pointers object

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

现在我想选择一个对象,比如说A,然后func(A,x)通过所有其他对象.所以基本上可以实现以下目

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

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

...
Run Code Online (Sandbox Code Playgroud)

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

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

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

mat*_*gui 4

我怀疑(在没有看到你的代码的情况下很难)你的类 A、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.
Run Code Online (Sandbox Code Playgroud)

但是,如果您这样做:

classdef fromHandle < handle
  properties
    name = '';
  end
  methods
    function obj = fromHandle ( name )
      obj.name = name;
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

然后做:

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.
Run Code Online (Sandbox Code Playgroud)