C++ クラスをラップするために 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.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 を pythonとして取得する方法があるかどうか疑問に思っています。list
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;
しかし、これは明らかに同じデータを含む 2 つの構造体を格納する必要があります。c++ から cython を使用してリストにマップする方法があるかどうか、または boost::python を使用する必要があるかどうか疑問に思っています。