成员函数的matlab函数句柄

时间:2015-02-19 20:01:40

标签: matlab

考虑以下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'.

1 个答案:

答案 0 :(得分:0)

我找到了自己问题的答案:

而不是使用成员函数的直接句柄,

featureHandle = @obj.cnn.getFeature;

我们需要使用一个匿名函数来模拟对成员函数的调用,

featureHandle = @(input)(obj.cnn.getFeature(input));

我不确定区别在哪里,但我认为第二个版本强制Matlab实例化obj.cnn.getFeature的副本,因此即使没有对obj的引用也可以调用它。