在swig界面中取消引用boost :: shared_ptr的好方法

时间:2014-03-20 20:05:42

标签: python c++ boost swig

是否有一种好的自动方式允许我将shared_ptr传递给期望在SWIG界面中引用的函数?

我有一个提供以下功能的库:

// Module message
typedef boost::shared_ptr< Item > ItemPtr;
class Message{
  public:
     ItemPtr getItem( int index) ...
     ...
};

然后是另一个使用它们的库:

// Module client
class Client{
  public:
    void processItem( const Item& item );
}

这些是单独的模块。

显然,我想做类似的事情:

>>> item=message.getItem(4)
>>> client.processItem( item )

在python中, 但是类型不对齐,itemshared_ptr,而函数需要引用。

到目前为止,我的解决方案是覆盖接口文件中的函数

%extend client {
    void processItem( ItemPtr ptr){ 
        $self->processItem( *ptr);
    }
}

有没有一种方法,我可以避免重复所有期望引用的接口函数,但我会shared_ptr的哪些?

1 个答案:

答案 0 :(得分:1)

只需从Item函数返回getItem(int index)个实例即可。哦,你必须重载函数才能接收两种参数类型(shared_ptrItem引用)