我试图用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可能不支持嵌套的typedef。如果这是真的,是否有针对此问题的解决方法?
谢谢!
答案 0 :(得分:2)
我已经使用namespace
关键字使嵌套定义工作,指定嵌套声明。就像,如果你有例如以下名为mystuff.hpp
的C ++标头中的以下内容:
namespace MyStuff {
struct Outer {
struct Inner {
int value;
};
Inner member;
};
}
......你可以像这样结构那些结构:
cdef extern from "mystuff.hpp" namespace "MyStuff::Outer":
cppclass Inner:
int value
cdef extern from "mystuff.hpp" namespace "MyStuff":
cppclass Outer:
Inner member
...如果你真的拥有C ++中的所有内容,它会更加连贯地读取 - 写入命名空间中的地方(否则第二个cdef
在其声明中没有namespace
,看起来更加狡猾的IMO)。
我有许多现实世界的实例:one such example is here,another one is here。图示的示例代码最初显示为here。