How to call a class-specified overloaded version of a function without using an object instance as an argument
조회 수: 3 (최근 30일)
이전 댓글 표시
I have a class:
classdef fast_calc < handle
properties
value
end
methods
function obj = fast_calc(x)
obj.value = x;
end
function y = sin(obj)
if isa(obj,'fast_calc')
x = obj.value;
else
x = obj;
end
% Fast calculation of sin using a Taylor expansion:
y = x - x.^3 / 6;
end
end
end
the function sin works fine on a fast_calc object:
>> myNum = fast_calc(pi/6);
>> sin(myNum)
ans =
0.4997
However, I would like also to be to call it directly on a standard numeric variable, something like:
>> fast_calc.sin(pi/6)
but this returns an error
The class fast_calc has no Constant property or Static method named 'sin'.
I don't want to define 'sin' as a static method because then sin(myNum) will not automatically invoke the overloaded function.
Is there a solution which allows calling an overloaded method both automatically on an instance, and on other object types when explicitly requesitng it?
댓글 수: 0
채택된 답변
per isakson
2021년 8월 21일
편집: per isakson
2021년 8월 21일
"I don't want to define 'sin' as a static method because then sin(myNum) will not automatically invoke the overloaded function"
I have defined sin() as a Static method (attached) and here (R2018b) both ways of calling works
fast_calc.sin(pi/6)
fc = fast_calc(pi/6);
fast_calc.sin( fc )
Ok, that's not what you asked, but AFAIK it's what Matlab offers.
댓글 수: 0
추가 답변 (1개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!