Ich versuche, einige C++ Code mit Cython zu wickeln.Cython: Workaround für verschachtelte typedefs
Die C++ Header-Datei "graph.h" enthält folgende Definition:
#include "Block.h"
template <typename graphtype> class Graph
{
public:
typedef enum
{
SOURCE = 0,
SINK = 1
} termtype; // terminals
typedef int node_id;
typedef Block<double> Block_D;
Graph()
}
Ich habe versucht, die folgenden in "Graph.pyx":
cdef extern from "graph.h":
cdef cppclass Graph[graphtype]:
ctypedef int node_id
ctypedef enum termtype:
SOURCE
SINK
ctypedef Block<double> Block;
jedoch keiner der Arbeit. Ich habe festgestellt, dass Cython geschachtelte Typdefinitionen möglicherweise nicht unterstützt. Wenn das stimmt, gibt es eine Problemumgehung für dieses Problem?
Danke!
Direkt von der Fledermaus: Sie sollten 'ctypedef Block Block ändern;' zu 'ctypedef Block [double] Block' - und dann nicht überrascht sein, wenn der Cython-Compiler balckt, weil diese Zeile versucht, 'typedef'-Alias etwas rekursiv * ad infinitium *. Sie können diese Zeile immer löschen, wenn Sie 'Block' nicht explizit in Ihrem Cython-Code verwenden müssen (denken Sie daran, dass Cython' extern' -Definitionen nicht * alles * von den Header-Dateien enthalten müssen, die sie untersuchen, nur was Sie brauchen mit Namen zu verwenden). –
fish2000