Ограничения указателя на функцию для генерации кода
Когда вы используете указатели на функцию в коде MATLAB®, предназначенном для генерации кода, придерживаетесь следующих ограничений:
Не используйте ту же связанную переменную, чтобы сослаться на различные указатели на функцию
В некоторых случаях использование той же связанной переменной, чтобы сослаться на различные указатели на функцию вызывает ошибку времени компиляции. Например, этот код не компилирует:
function y = foo(p)
x = @plus;
if p
x = @minus;
end
y = x(1, 2);
Не передавайте указатели на функцию или от coder.ceval
Вы не можете передать указатели на функцию как входные параметры к или выходные параметры от coder.ceval
. Например, предположите, что f
и str.f
являются указателями на функцию:
f = @sin;
str.x = pi;
str.f = f;
Следующие операторы приводят к ошибкам компиляции:
coder.ceval('foo', @sin);
coder.ceval('foo', f);
coder.ceval('foo', str);
Не сопоставляйте указатель на функцию с внешней функцией
Вы не можете создать указатель на функцию, который ссылается на внешнюю функцию MATLAB.
Не передавайте указатели на функцию или от внешних функций
Вы не можете передать указатели на функцию или от feval
и других внешних функций MATLAB.
Не передавайте указатели на функцию или от функций точки входа
Вы не можете передать указатели на функцию как входные параметры к или выходные параметры от функций точки входа. Например, рассмотрите эту функцию:
function x = plotFcn(fhandle, data)
assert(isa(fhandle,'function_handle') && isa(data,'double'));
plot(data, fhandle(data));
x = fhandle(data);
В этом примере функциональный plotFcn
получает указатель на функцию и его данные как входные параметры. plotFcn
пытается вызвать функцию, на которую ссылается fhandle
с входом data
и построить результаты. Однако этот код генерирует ошибку компиляции. Ошибка указывает, что функциональный isa
не распознает, что 'function_handle'
именем класса, когда названо в функции MATLAB задает свойства входных параметров.
Похожие темы