我正在使用 cython 来包装我的 C++ 类:
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;
}
}
我想知道是否有某种方法可以获得std::map
as pythondict
和 std::vector as pythonlist
而无需显式创建(从而浪费内存)此类结构的副本。
std::vector 的一个诱人的实现如下:
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;
但这显然必须存储两个包含相同数据的结构。我想知道是否有办法从 c++ 映射到 cython 列表,或者我应该使用 boost::python 吗?