How to call a class-specified overloaded version of a function without using an object instance as an argument

1 vue (au cours des 30 derniers jours)
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?

Réponse acceptée

per isakson
per isakson le 21 Août 2021
Modifié(e) : per isakson le 21 Août 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)
ans = 0.4997
fc = fast_calc(pi/6);
fast_calc.sin( fc )
ans = 0.4997
Ok, that's not what you asked, but AFAIK it's what Matlab offers.

Plus de réponses (1)

royk
royk le 21 Août 2021
thnaks.
indeed really what i wanted cause you cannot use the simple notation sin(fc) .
but thanks for clarifying that this is it as far as what Matlab offers

Catégories

En savoir plus sur Construct and Work with Object Arrays dans Help Center et File Exchange

Produits


Version

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by