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 和继承?

4

2 回答 2

4

仅当可以在编译时评估“if”条件时,这种模式才可能在 MATLAB Function 块中使用。不能在运行时切换类型。您可以在调用站点将索引值设为常量吗?

于 2013-09-26T15:25:21.400 回答
2

使用这种模式的主要原因是迭代一个measurementHandler数组,而这些都可以有自定义的实现。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 循环在编译时展开,并且函数的返回类型为每个单独的调用定义良好。

于 2013-09-27T07:01:46.613 回答