Ограничения указателя на функцию для генерации кода
Когда вы используете указатели на функцию в коде 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, чтобы задать свойства входных параметров.
Похожие темы