【问题标题】:Matlab function handle of member function成员函数的matlab函数句柄
【发布时间】:2015-02-19 20:01:39
【问题描述】:

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

我的目标是让 factor 使用 CNN 类的 getFeature 方法,例如,

c = myClass;
c.factor.cnnHandle(input);

但是上面的代码不起作用,因为Matlab好像在Factor类中寻找属性cnn,可能是因为句柄使用obj来引用当前类:

Undefined function 'obj.cnn.getFeature' for input arguments of type 'double'.

【问题讨论】:

  • this thread 的可能重复项,但您的代码中可能存在错误。请发布完整代码和错误消息。
  • 分两步试试。 localcnn = obj.cnn; featureHandle = @localcnn.getFeature;
  • @Crazy Rat:我知道这篇文章和建议的解决方案是正确的。但是,它没有处理在另一个对象类中使用句柄的情况,这可能是我的问题的原因。不幸的是,由于 IP 问题,我不能发布完整的代码,但我已经用错误消息更新了帖子。

标签: matlab


【解决方案1】:

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

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

featureHandle = @obj.cnn.getFeature;

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

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

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

【讨论】:

  • 你能发布getFeature的“原型”吗?我的意思是,它是否需要一些输入?
  • 是的,它确实需要输入,本质上是一个wxhx3 uint8 数组(RGB 图像)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多