У меня есть библиотека C ++, в которой есть оболочка Python (написана на SWIG). Эта библиотека позволяет выполнять небольшой определяемый пользователем код (обратный вызов), такой как поэлементные операции с вектором. То есть вместо просто + вы можете сделать любую произвольную двоичную функцию. Прямо сейчас это достигается путем принятия вызываемого объекта Python для двоичной функции и вызова его. Он работает, но примерно в 80 раз медленнее, чем код, который не должен прыгать вверх и вниз в Python на каждой итерации.
Как мне написать / построить / импортировать функцию Cython, которая может быть передана в мою библиотеку C ++, чтобы ее можно было вызывать напрямую из библиотеки C ++?
Edit:
Если бы я просто придерживался C, то написал бы что-то вроде
EWise(double (*callback)(double, double))
EWise тогда callback(10, 20);
или что-то подобное. Я хочу, чтобы callback
был написан на Cython, используя любое имя, которое хочет пользователь, и указатель на него должен как-то передаваться в мою библиотеку C ++ через Python. Это как-то, где я неясен.