我已经定义了一个抽象基类 measurementHandler < handle
,它定义了所有继承类的接口 . 这个类的两个子类是 a < measurementHandler
和 b < 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 回答
只有在编译时可以评估“if”条件时,才能在MATLAB功能块中使用这种模式 . 这些类型无法在运行时切换 . 你能在调用网站上使索引值保持不变吗?
使用此模式的主要原因是迭代
measurementHandler
Array,而这些都可以具有自定义实现 . 我能够通过使用coder.unroll
指令展开循环来完成此操作 . 封闭MTALAB功能块的示例:这样,for循环在编译时展开,并且为每个单独的调用定义了函数的返回类型 .