加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

c – Boost Python:多态容器?

发布时间:2020-12-16 22:03:49 所属栏目:Python 来源:网络整理
导读:我有一个方法(或函数),它返回对多态对象列表的引用: class A {};class B : public A {};std::list 我如何在boost :: python中公开这样的函数,以便在python中迭代列表时,我会看到不同类型的As和Bs? 最佳答案 首先,确保您的类确实是多态的(即它们至少有一个

我有一个方法(或函数),它返回对多态对象列表的引用:

class A {

};
class B : public A {

};


std::list

我如何在boost :: python中公开这样的函数,以便在python中迭代列表时,我会看到不同类型的As和Bs?

最佳答案
首先,确保您的类确实是多态的(即它们至少有一个虚函数或一个虚析构函数).上面的例子没有,但我确定你的真实用例.没有这一点,Boost.Python的基于RTTI的多态机制都不会起作用.

然后,如果您已经使用Boost.Python和已注册的shared_ptr转换器为它们公开了这两个类:

#include 

…这就是你需要做的就是确保Python只能看到派生最多的类型.没有必要做任何特别的事情来确保在可能的情况下将A转换为B.

这仍然留下了如何包装返回容器的函数的问题.最简单的可能是使用Boost.Python中包含的索引套件:

http://www.boost.org/doc/libs/1_49_0/libs/python/doc/v2/indexing.html

Web上还有其他选项(包括索引套件的“版本2”,在许多方面都更好,但不包含在Boost.Python中),但对于简单的问题,这可能是最方便的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读