У меня есть функция Cython как:ctypedef функции Cython с аргументами по умолчанию
cdef void foo(int a, int b=1, int c=2):
pass
и функцию геттера вернуть его адрес:
def get_foo():
return <size_t>foo
так что я могу получить функцию foo
«s адрес где-то и вернуть его обратно к реальной функции в cython (например: обратный вызов, который можно использовать в python).
Проблема в том, как написать такой тип?
Я пробовал:
cdef void foo(int a, int b=1, int c=2):
pass
ctypedef void (*foo_type)(int a, int b, int c)
cdef foo_type f = foo
это не компилируется, Cython жалуется: Невозможно присвоить тип 'недействительный (INT, STRUCT __pyx_opt_args_46_cython_magic_49f265438c694830523a60bef4fe2ee8_foo * __ pyx_optional_args)' к 'foo_type'
Из электронного письма ошибки, можно заметить, что аргументы опции (по умолчанию) завернуты в структуру cython.
Есть ли способ сделать такой ctypedef в cython? Если нет, то я думаю, что я бы лучше оставить в значении по умолчанию :-(
Спасибо за ответ. это возможный путь. Наконец Я понял, что аргумент по умолчанию не может быть предоставлен для указателей функций, а аргументы по умолчанию не учитываются для типа, это действительно вопрос для части c/C++. У меня есть функция со многими параметрами, большая часть из которых имеет значение по умолчанию для удобства, добавив столько оберток, что будет скучно, поэтому оставить значение по умолчанию в части c/cython и оставить его для части python будет лучше для меня , в конце концов, это расширение python: -D – oz1