Python Cython:嵌套typedef的变通方法 我试图用Cython包一些C++代码。< /P> C++头文件“图.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() } #包括“Block.h” 模板类图 { 公众: 类型定义枚举 { 来源=0, 水槽=1 }termtype;//终端 typedef int node_id; 类型定义块D; 图() }
我在“Graph.pyx”中尝试了以下内容: “graph.h”中的cdef外部: cdef类图[graphtype]: ctypedef int node_id ctypedef枚举术语类型: 来源 下沉 ctypedef块; 然而,这些都不起作用。我发现Cython可能不支持嵌套的typedef。如果这是真的,这个问题有解决办法吗Python Cython:嵌套typedef的变通方法 我试图用Cython包一些C++代码。< /P> C++头文件“图.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() } #包括“Block.h” 模板类图 { 公众: 类型定义枚举 { 来源=0, 水槽=1 }termtype;//终端 typedef int node_id; 类型定义块D; 图() },python,cython,Python,Cython,我在“Graph.pyx”中尝试了以下内容: “graph.h”中的cdef外部: cdef类图[graphtype]: ctypedef int node_id ctypedef枚举术语类型: 来源 下沉 ctypedef块; 然而,这些都不起作用。我发现Cython可能不支持嵌套的typedef。如果这是真的,这个问题有解决办法吗 谢谢 我使用名称空间关键字获得了嵌套定义,指定了嵌套声明。比如,如果你在C++标题中有如下的名字: MyToo.HPP >: namespace MyStuf
谢谢 我使用
名称空间
关键字获得了嵌套定义,指定了嵌套声明。比如,如果你在C++标题中有如下的名字:<代码> MyToo.HPP >:
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++-land中的所有内容都封装在一个名称空间中(否则,第二个cdef
在其声明中没有名称空间,这在我看来更为复杂),那么它的阅读会更加连贯
我有一些现实世界中目前正在工作的例子:。图示的示例代码最初显示出来。立即:您应该更改ctypedef块
到ctypedef Block[double]Block
——如果Cython编译器因为该行试图typedef
而停止,请不要感到惊讶——将某个对象递归地无限地别名。如果不需要在Cython代码中显式使用Block
,则始终可以删除该行(请记住,Cythonextern
定义不必包含它们检查的头文件中的所有内容,只需按名称使用)。
cdef extern from "mystuff.hpp" namespace "MyStuff::Outer":
cppclass Inner:
int value
cdef extern from "mystuff.hpp" namespace "MyStuff":
cppclass Outer:
Inner member