提取基类指针

0 投票
1 回答
1534 浏览
提问于 2025-04-16 15:26

有人告诉我,我可以从任何 boost::python::object 中提取基类的引用。

简单的代码看起来是这样的:

// c++:
class Base {};

// Export Base into python module

// python:
class Der(Base):
   pass

//c++:
boost::python::object obj; // It points to some Der class object made from python
boost::shared_ptr<Object> temp = extract< boost::shared_ptr<Object> >(obj);

但是最后一行出错了,错误信息是:

类型错误:没有注册的转换器能够从这个类型为 Der 的 Python 对象生成 C++ 的 rvalue 类型 boost::shared_ptr。

我能否提取出 Base 类的指针呢?

1 个回答

2

所以,通过这个帖子我解决了我的问题。首先,我的Base类是这样导出到Python中的:

bp::class_<Base, boost::noncopyable>("Base", bp::no_init)

我不得不去掉bp::no_init。为什么呢?看看接下来的更新(我之前提到的stackoverflow帖子里的答案):

class Der(Base):
    def __init__(self):
        super(Der, self).__init__() # Add this!

就这样(:

撰写回答