C++ 在SWIG for Python中包装boost::shared_ptr的std::vector
编辑:解决了我的错误;在我的回答中解释 我有这个:C++ 在SWIG for Python中包装boost::shared_ptr的std::vector,c++,python,vector,swig,shared-ptr,C++,Python,Vector,Swig,Shared Ptr,编辑:解决了我的错误;在我的回答中解释 我有这个: std::vector < boost::shared_ptr < Entity > > entities; 我在谷歌上搜索过这个,但找不到任何具体的例子来说明如何包装这个。其中一页给出了一个小例子,说明如何将它包装成C#,但对我的情况没有帮助 非常感谢您的帮助。请参阅,以获取可能有用的信息SWIG似乎将std::vector类型的全局变量包装成元组。解决方案是将实体移动到类中,并通过该类的实例访问它。例如: clas
std::vector < boost::shared_ptr < Entity > > entities;
我在谷歌上搜索过这个,但找不到任何具体的例子来说明如何包装这个。其中一页给出了一个小例子,说明如何将它包装成C#,但对我的情况没有帮助
非常感谢您的帮助。请参阅,以获取可能有用的信息SWIG似乎将std::vector类型的全局变量包装成元组。解决方案是将实体移动到类中,并通过该类的实例访问它。例如:
class Globals
{
public:
std::vector < boost::shared_ptr < Entity > > entities;
};
extern Globals globals;
类全局变量
{
公众:
std::vector>实体;
};
外部全局全局;
我很难让指针对象的Python序列自动转换为指针对象的std::vector
。我目前正在使用Swig 1.3;如果您使用的是Swig 2,则为YMMV。诀窍是在Swig接口文件(使用%template
)中实例化的不仅仅是向量,也不仅仅是对象,还有指针对象:
%include "std_vector.i"
%template(myObjectT) namespace::of::myObject<T>;
%template(myObjectPtrT) boost::shared_ptr<namespace::of::myObject<T> >;
%template(myObjectVectorT) std::vector<boost::shared_ptr<namespace::of::myObject<T> > >;
%包括“std_vector.i”
%模板(myObject)命名空间::of::myObject;
%模板(myObjectPtrT)boost::shared_ptr;
%模板(myObjectVec侵权)std::vector;
没有myObjectPtrT
,Swig似乎不知道如何将指向myObjectT
的Python指针序列转换为myobjectvecort
更新:由于某些原因,我还没有弄清楚,这导致无法从
myObjectPtrT
调用myObjectT
上的方法,尽管我也使用了SWIG\u SHARED\u PTR(myObjectT,myObject)
感谢您的回答,但正如您在我的问题中看到的那样,我已经知道如何包装std::vector。问题是如何包装boost::shared_ptr的std::vector。SWIG似乎将其作为一个元组公开,因为它无法理解其中的共享部分。是的,谢谢,我已经读过了,但我没有看到任何相关内容。同样,我可以包装boost::shared_ptr和std::vector,它们可以按预期工作。问题特别是std::vectorclass Globals
{
public:
std::vector < boost::shared_ptr < Entity > > entities;
};
extern Globals globals;
%include "std_vector.i"
%template(myObjectT) namespace::of::myObject<T>;
%template(myObjectPtrT) boost::shared_ptr<namespace::of::myObject<T> >;
%template(myObjectVectorT) std::vector<boost::shared_ptr<namespace::of::myObject<T> > >;