2013-10-07 78 views
0

我想創建一個使用boost python的對象。類定義(僞):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(沒有孩子)。所以它找不到python實現的「foo」版本。如果我在Awrap類中實現foo而不是python子類,它可以正常工作,但我不想這樣做!

有什麼建議嗎?

謝謝!

回答