考虑以下Matlab类的定义:
classdef myClass < handle
properties
cnn
factor
end
methods
function obj = myClass()
if nargin>0
obj.cnn = CNN();
obj.factor = Factor();
featureHandle = @obj.cnn.getFeature;
factor.setCNN(featureHandle);
end
end
end
end
cnn和factor是另外两个类CNN和Factor的实例。 CNN类具有函数getFeature,而Factor类具有函数setCNN。
我的目标是让因子使用CNN类的getFeature方法,例如,
c = myClass;
c.factor.cnnHandle(input);
但上面的代码不起作用,因为Matlab似乎在Factor类中寻找属性cnn,可能是因为句柄使用obj来引用当前类:
Undefined function 'obj.cnn.getFeature' for input arguments of type 'double'.
答案 0 :(得分:0)
我找到了自己问题的答案:
而不是使用成员函数的直接句柄,
featureHandle = @obj.cnn.getFeature;
我们需要使用一个匿名函数来模拟对成员函数的调用,
featureHandle = @(input)(obj.cnn.getFeature(input));
我不确定区别在哪里,但我认为第二个版本强制Matlab实例化obj.cnn.getFeature的副本,因此即使没有对obj的引用也可以调用它。