编程语言
首页 > 编程语言> > c-在SWIG for Python中包装boost :: shared_ptr的std :: vector

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