Cython映射c++;数据结构 我使用Cython来包装我的C++类:
Cython映射c++;数据结构 我使用Cython来包装我的C++类:,c++,python,wrapper,cython,C++,Python,Wrapper,Cython,Foo.h class Foo { private: std::map<int,int > myMap; std::vector<int> myVector; public: // An example of internal structures initialization Foo() { for (int i=0; i<10; i++) { myVector.pu
Foo.h
class Foo
{
private:
std::map<int,int > myMap;
std::vector<int> myVector;
public:
// An example of internal structures initialization
Foo()
{
for (int i=0; i<10; i++)
{
myVector.push_back(i);
myMap[i]=i*i;
}
}
std::map<int,int> getMyMap()
{
return myMap;
}
std::vector<int> getMyVector()
{
return myVector;
}
}
但这显然必须存储包含相同数据的两个结构。我想知道有没有办法用Cython从C++映射到列表,或者我应该使用Booo::Python? < P>,这是一个非常好的理由,将向量转换为Python列表,它将它作为Python代码中的常规列表。但是,您可以包装向量并添加getter函数。您确实可以节省一些内存,但我认为这会大大降低效率,因为您每次都必须调用该函数来获取值,并且无法像在python列表中那样在任何python表达式中使用它。好的,我面临的唯一问题是处理向量的自定义类型。在本例中,我们使用
vector
,但cython编译器无法处理,例如vector
,其中Foo
是我的一个类。事实上,对于您所要求的,python list和dict应该最适合。至于Foo*——您可以通过使用uintptr_t type而不是Foo*来解决这个问题,并在cdef方法中转换回Foo*。
cdef extern from "Foo.h":
cdef cppclass Foo:
Foo()
vector[int] getMyVector()
cdef class pyFoo:
cdef Foo *thisptr # hold a C++ instance which we're wrapping
def __cinit__(self):
self.thisptr = new Foo()
def getMyVector(self):
cdef vector[int] aa
cdef int N
b= []
aa = self.thisptr.getMyVector()
N=aa.size()
for i in range(N):
b.append(aa[i])
return b;