Я хочу перегрузить индексирование с помощью ()
и {}
для одного из моих классов MATLAB.Это возможно путем реализации subsref
для этого класса, и он отлично работает.
Однако я также хочу сохранить поведение индексации по умолчанию через .
(то есть доступ к методами свойства) для этого класса.Я попытался использовать следующий код:
function x = subsref(this, S)
if strcmp(S(1).type, '{}')
% My own implementation here
elseif strcmp(S(1).type, '()')
% My own implementation here
elseif strcmp(S(1).type, '.')
x = builtin('subsref', this, S);
else
error('Unknown index variant.');
end
Однако это не работает, потому что я априори не знаю, сколько выходных аргументов вернет вызов builtin('subsref', this, S)
.В частности, метод моего класса может возвращать переменное число аргументов, причем количество выходных аргументов зависит от количества и значений его входных аргументов.A Пример MATLAB для subsref
примечаний:
When you implement a subsref method for a class, you must
implement all subscripted reference explicitly [...]
Это действительно единственно возможное решение?Для сложных методов это в основном означает дублирование большого количества логики.Это определенно не поддерживается в моем случае (большие классы с большим количеством методов и свойств).
Примечание: я знаю, что это все о синтаксическом сахаре и что я всегда могу использовать стандартные вызовы методов вместо перегрузки ()
и {}
.