Я определил абстрактный базовый класс measurementHandler < handle
, который определяет интерфейс для всех унаследованных классов. Два подкласса этого класса - a < measurementHandler
и b < measurementHandler
.Проблема наследования Matlab OOP Matlab (функциональный блок Simulink MATLAB)
Теперь у меня есть функция, которая должна возвращать дескриптор экземпляру любого из этих подклассов (в зависимости от аргументов функции) его вызывающему. Рассмотрим что-то вроде этого:
function returnValue = foobar(index)
if index == 0
returnValue = a();
else
returnValue = b();
end
end
Эта функция заключена в функции блока в MATLAB в Simulink (2013a). Когда я пытаюсь моделировать систему, я получаю следующее сообщение об ошибке:
Type name mismatch (a ~= b).
Может кто-нибудь предложить обходной путь для этого, который все еще позволяет мне воспользоваться ООП & наследования при использовании Simulink?
Хороший ответ. Я постараюсь выяснить, смогу ли я решить свою проблему таким образом, когда буду завтра на моем столе. Другой возможный подход состоял бы в том, чтобы итерации по массиву объектов измеренияHandler, которые, похоже, не работают с ** функцией MATLAB Function **, не так ли? –
Массив объектов не поддерживается в функциональном блоке MATLAB. – Navan
Получил его на работу. Основная причина использования этого шаблона состояла в том, чтобы перебирать массив 'измеренияHandler', в то время как все они могут иметь пользовательские реализации. Я смог сделать это, развернув цикл с помощью директивы 'coder.unroll'. Таким образом, цикл for обрабатывается во время компиляции, и тип возврата функции определен для каждого отдельного вызова. Спасибо, что поставил меня на правильный путь! –