我正在尝试使用Cython包装一些C++代码。
C++头文件“graph.h”包含以下定义:
#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()
}
我在 "Graph.pyx" 中尝试了以下内容:
cdef extern from "graph.h":
cdef cppclass Graph[graphtype]:
ctypedef int node_id
ctypedef enum termtype:
SOURCE
SINK
ctypedef Block<double> Block;
然而,这些都不起作用。我发现Cython可能不支持嵌套的typedefs。如果是这样,那么有没有解决此问题的方法?
谢谢!
ctypedef Block<double> Block;
改为ctypedef Block[double] Block
- 然后不要惊讶,如果Cython编译器因为这一行试图无限递归地typedef
-alias某些东西而出现错误。如果你在Cython代码中不需要显式使用Block
,那么你可以随时删除该行(请记住,Cython的extern
定义不必包括它们检查的头文件中的 所有 东西,只需按名称使用所需内容)。 - fish2000