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