【问题标题】:Static create methods in boost pythonboost python中的静态创建方法
【发布时间】:2013-10-07 21:31:33
【问题描述】:

我正在尝试使用 boost python 创建一个对象。类定义(伪代码):

class Awrap : public A, public boost::python::wrapper<A> {
   static std::shared_ptr<A > Create(...) { ... } // inherited from A

   virtual double foo(...) override { // overrides pure virtual function in A
          return this->get_override("foo")(...);
   }
};

BOOST_PYTHON_MODULE() {
   using namespace boost::python
   class_<Awrap,std::shared_ptr<Awrap>, boost::noncopyable>("A",boost::python::no_init)
     .def("Create",&A::Create).staticmethod("Create")
     .def("foo",pure_virtual(&Awrap::foo));

     boost::python::register_ptr_to_python<std::shared_ptr<A> >();
}

问题是,当我在 python 中实现子对象并调用静态创建方法时,它会创建一个指向 Awrap(而不是子对象)的指针。所以它找不到“foo”的python实现版本。如果我在 Awrap 类而不是 python 子类中实现 foo 它工作正常,但我不想这样做!

有什么建议吗?

谢谢!

【问题讨论】:

    标签: c++ python boost boost-python


    【解决方案1】:

    您需要同时公开Awrap::fooA::foo 来增强python。参见示例:

    http://www.boost.org/doc/libs/1_54_0/libs/python/doc/tutorial/doc/html/python/exposing.html

    【讨论】:

    • 我通过添加 boost::python::register_ptr_to_python<:shared_ptr>(); 做到了这一点
    猜你喜欢
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2010-10-17
    • 2010-10-18
    相关资源
    最近更新 更多