How to call a class-specified overloaded version of a function without using an object instance as an argument
2 views (last 30 days)
Show older comments
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 Comments
Accepted Answer
per isakson
on 21 Aug 2021
Edited: per isakson
on 21 Aug 2021
"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 Comments
More Answers (1)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!