Ctypes: DataTypes из C-определения
У меня есть адрес функции, а также ее "c-like" представление (из llvmlite, но это не так важно).
Для функции, которая складывает два двойных значения и возвращает их, код будет выглядеть так: cfunc = CFUNCTYPE(c_double, c_double, c_double)(func_ptr)
Это будет работать довольно хорошо, однако аргумент моей функции может различаться по типу и количеству. В Python это решаемо с некоторыми for arg in args
генератор.
Однако у меня нет инструмента (или, по крайней мере, я его не нашел), как "преобразовать" или разобрать мои типы в типы ctype.
Аргументы являются объектами типа llvmlite, поэтому у меня есть доступное представление типа c.
Мой подход заключается в создании dict, который может отображать объекты типа llvmlite-Type или c-представление для объектов Type типов ctypes. Маленький парсер тоже может помочь.
Разве ctype уже не предоставляет что-то подобное? Волшебная функция: ctypes.magic("double") == ctypes.c_double
Я не связан с типами. Я знаю, что CFFI существует, однако у меня 0 опыта работы с ним, и, поскольку я смотрю в документах, я не смог найти даже базового решения для одного адреса функции.
Я знаю, что мой случай использования довольно редок, поскольку обе эти библиотеки больше заботятся о библиотеках, а не об адресе конкретной функции.
1 ответ
Хорошо, я просто использую диктовку со всеми возможностями. Поскольку я, вероятно, буду связан только с llvmlite, вариантов не так много.{str(ir.DoubleType()): ct.c_double, ....}