首页 文章

使用Matlab编码器进行OOP Matlab继承问题(Simulink MATLAB功能块)

提问于
浏览
4

我已经定义了一个抽象基类 measurementHandler < handle ,它定义了所有继承类的接口 . 这个类的两个子类是 a < measurementHandlerb < measurementHandler .

我现在有一个函数应该返回一个句柄给这个子类的任何一个实例(取决于函数参数)给它的调用者 . 考虑这样的事情:

function returnValue = foobar(index)
    if index == 0
        returnValue = a();
    else
        returnValue = b();
    end
end

此函数包含在Simulink(2013a)中的 MATLAB Function 块中 . 当我尝试模拟系统时,我收到以下错误:

Type name mismatch (a ~= b).

任何人都可以建议一个解决方法,这仍然允许我在使用Simulink时利用OOP和继承?

2 回答

  • 4

    只有在编译时可以评估“if”条件时,才能在MATLAB功能块中使用这种模式 . 这些类型无法在运行时切换 . 你能在调用网站上使索引值保持不变吗?

  • 2

    使用此模式的主要原因是迭代 measurementHandler Array,而这些都可以具有自定义实现 . 我能够通过使用 coder.unroll 指令展开循环来完成此操作 . 封闭MTALAB功能块的示例:

    function result = handleAllTheMeasurements(someInputs)
    %#codegen
        for index = coder.unroll(1:2)
             measurementHandler = foobar(index);
             measurementHandler.handleMeasurement(someInputs);
        end
    result = something;
    end
    

    这样,for循环在编译时展开,并且为每个单独的调用定义了函数的返回类型 .

相关问题