#c #cython #typedef #python-2.x
#c #cython #typedef #python-2.x
Вопрос:
Я хочу использовать в своих .pyx
типах C, которые typedef
объявлены в моем файле .h:
//decls.h
typedef double Doub
typedef long int LInt
//etc...
Моя простая работа заключалась в том, чтобы повторно объявить их в моем *.pxd (т. Е. Скопировать-вставить этот мой блок .h
в мою .pxd
замену typedef
-> ctypedef
).
Теперь я использую другой .h
с большим количеством typedef
операторов, поэтому мне хотелось бы более «китонический» способ объявления.
Я читал это, но мне это не помогло.
Может быть, что-то вроде?:
# .pxd cython file
cdef extern from "decls.h":
Doub # no idea what to put before `Doub`
Ответ №1:
Если единственным отличием является c
in typedef
, вы можете использовать препроцессор C для предварительной .h
обработки файла в файл, который может обрабатываться cython. Например:
// a .c file:
#define CTYPEDEF typedef
#include "mytypes.h"
// the "mytypes.h" for cython preprocessing
#ifndef CTYPEDEF
# define CTYPEDEF ctypedef
#endif
CTYPEDEF ... myType;
В вашем makefile или IDE создайте правило для предварительной обработки файла .h, а затем включите выходные данные в cython.
Если есть больше различий, вы можете выполнить обработку таким же образом и посмотреть это в качестве примера.
Комментарии:
1. приятно, но все же мне было интересно, есть ли какое-то решение, например
from "file.h" cimport ctype1, ctype2, ...
, или какое-тоcdef extern ...