Function Handle Limitations for Code Generation
When you use function handles in MATLAB® code intended for
code generation, adhere to the following restrictions:
Do not use the same bound variable to reference different function
handles
In some cases, using the same bound variable to reference different
function handles causes a compile-time error. For example, this code
does not compile:
function y = foo(p)
x = @plus;
if p
x = @minus;
end
y = x(1, 2);
Do not pass function handles to or from coder.ceval
You cannot pass function handles as inputs to or outputs from coder.ceval
(MATLAB Coder). For example, suppose that f
and str.f
are
function handles:
f = @sin;
str.x = pi;
str.f = f;
The following statements result in compilation errors:
coder.ceval('foo', @sin);
coder.ceval('foo', f);
coder.ceval('foo', str);
Do not associate a function handle with an extrinsic function
You cannot create a function handle that references an extrinsic MATLAB function.
Do not pass function handles to or from extrinsic functions
You cannot pass function handles to or from feval
and other extrinsic MATLAB functions.
Do not pass function handles to or from entry-point functions
You cannot pass function handles as inputs to or outputs from
entry-point functions. For example, consider this function:
function x = plotFcn(fhandle, data)
assert(isa(fhandle,'function_handle') && isa(data,'double'));
plot(data, fhandle(data));
x = fhandle(data);
In this example, the function plotFcn
receives
a function handle and its data as inputs. plotFcn
attempts
to call the function referenced by the fhandle
with
the input data
and plot the results. However, this
code generates a compilation error. The error indicates that the function isa
does
not recognize 'function_handle'
as a class name
when called inside a MATLAB function to specify properties of
inputs.
Related Topics