mor*_*rog 4 c++ python swig vector shared-ptr
编辑:解决了,我的错误;在我的回答中解释了。
我有这个:
std::vector < boost::shared_ptr < Entity > > entities;
Run Code Online (Sandbox Code Playgroud)
我尝试通过 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>
Run Code Online (Sandbox Code Playgroud)
然而,在 Python 中实体最终是一个元组:
import MyModule
print type(MyModule.cvar.entities)
# Output: (type 'tuple')
Run Code Online (Sandbox Code Playgroud)
我已经用谷歌搜索过这个,但找不到任何关于如何包装它的具体例子。一页给出了一个小示例,用于将其包装为 C#,但对我来说没有帮助。
任何帮助是极大的赞赏。
我在将 Python 指针对象序列自动转换为指针对象时遇到了一些困难std::vector
。我目前(卡住)使用 Swig 1.3;YMMV 如果您使用的是 Swig 2。诀窍是在 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> > >;
Run Code Online (Sandbox Code Playgroud)
如果没有myObjectPtrT
,Swig 似乎没有足够的知识将 Python 指针序列转换myObjectT
为myObjectVectorT
。
更新:出于某种原因,我还没有弄清楚,这导致无法myObjectT
从 a调用方法myObjectPtrT
,即使我也使用了SWIG_SHARED_PTR(myObjectT, myObject<T>)
.
归档时间: |
|
查看次数: |
2763 次 |
最近记录: |