Boost.Python教程:类的继承

26 篇文章 0 订阅

在前面的示例中,我们处理的是非多态的类。通常情况并非如此。大多数时候,我们将包含通过继承相关的多态类和类层次结构。我们经常需要为从抽象基类派生的类编写Boost.Python包装器。
考虑这个简单的继承结构:

struct Base { virtual ~Base(); };
struct Derived : Base {};

及在Base和Derived对象实例上运行的一组C ++函数:

void b(Base*);
void d(Derived*);
Base* factory() { return new Derived; }

我们已经看到了如何包装基类Base:

class_<Base>("Base")
    /*...*/
    ;

现在我们可以通知Boost.Python Derived和它的基类Base之间的继承关系。从而:

class_<Derived, bases<Base> >("Derived")
    /*...*/
    ;


这样做,我们免费获得一些东西:

Derived自动继承Base的所有Python方法(包装的C ++成员函数)
如果Base是多态的,
通过指针或对Base的引用传递给Python的派生对象可以在需要指向Derived的指针或引用的位置传递。
现在,我们将公开C ++免费函数b和d以及工厂:

def("b", b);
def("d", d);
def("factory", factory);


请注意,正在使用自由函数工厂生成类Derived的新实例。在这种情况下,我们使用return_value_policy <manage_new_object>来指示Python采用指向Base的指针并将实例保存在新的Python Base对象中,直到Python对象被销毁。我们稍后会看到更多的Boost.Python调用策略。

// Tell Python to take ownership of factory's result
def("factory", factory,
    return_value_policy<manage_new_object>());


 

https://github.com/Lxxing/PythonStudy

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道格拉斯范朋克

播种花生牛奶自留田

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值