c-在SWIG for Python中包装boost :: shared_ptr的std :: vector
作者:互联网
编辑:解决了,我的错误;在我的回答中解释.
我有这个:
std::vector < boost::shared_ptr < Entity > > entities;
我尝试通过SWIG公开它,如下所示:
%include "boost_shared_ptr.i"
%include "std_vector.i"
%shared_ptr(Entity)
%include <Entity.h>
namespace std {
%template(EntityVector) vector<boost::shared_ptr<Entity> >;
};
%include <TheFileWithEntities.h>
但是,在Python中,实体最终成为一个元组:
import MyModule
print type(MyModule.cvar.entities)
# Output: (type 'tuple')
我已经为此搜索了Google,但是找不到有关如何包装此内容的任何具体示例.一页提供了一个小示例,将其包装为C#,但对我而言没有帮助.
任何帮助是极大的赞赏.
解决方法:
我在获取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> > >;
如果没有myObjectPtrT,Swig似乎不了解如何将指向myObjectT的Python指针序列转换为myObjectVectorT.
更新:由于某种原因,我还无法弄清楚,这导致无法从myObjectPtrT调用myObjectT上的方法,即使我也使用过SWIG_SHARED_PTR(myObjectT,myObject< T>).
标签:shared-ptr,vector,swig,python,c-4 来源: https://codeday.me/bug/20191102/1993914.html