使用boostpython公开多态性

2024-09-29 23:27:43 发布

您现在位置:Python中文网/ 问答频道 /正文

<>我开始感到非常沮丧,试图用Posi::Python将简单的C++多态性暴露给Python。在

<>我在C++中有以下结构:

struct Base {
    int typeID;
};

struct Derived : public Base {
    int derivedProperty;
}

//and some more from base derived types....    

Base *returnSomethingDerivedFromBase(...) {
    Derived *ret = new Derived;
    ret->derivedProperty = 1234;
    return ret;
}

BOOST_PYTHON_MODULE(foo) 
{
    class_<Base>("Base")
        .add_property("baseProperty", &Base::baseProperty);

    class_<Derived, bases<Base> >("Derived")
        .add_property("derivedProperty", &Derived::derivedProperty);

    def("returnSomethingDerivedFromBase", returnSomethingDerivedFromBase);    
}

在Python中,我只想得到以下内容:

^{pr2}$

有没有办法做到这一点?或者这不是像C++那样的吗?在

非常感谢你的帮助!!在


Tags: addbaseproperty结构structclassintret
1条回答
网友
1楼 · 发布于 2024-09-29 23:27:43

好吧,我错过了基类中的虚拟析构函数。下面是它的工作原理:

struct Base {
    virtual ~Base() {}
    int typeID;
};

struct Derived : public Base {
    int derivedProperty;
}

//and some more from base derived types....    

Base *returnSomethingDerivedFromBase(...) {
    Derived *ret = new Derived;
    ret->derivedProperty = 1234;
    return ret;
}

BOOST_PYTHON_MODULE(foo) 
{
    class_<Base>("Base")
        .add_property("baseProperty", &Base::baseProperty);

    class_<Derived, bases<Base> >("Derived")
        .add_property("derivedProperty", &Derived::derivedProperty);

    def("returnSomethingDerivedFromBase", returnSomethingDerivedFromBase, return_value_policy<manage_new_object>());    
}

但现在我有了另一个问题。当我试图在元组中返回此类型时,再次丢失类型信息:

^{pr2}$

相关问题 更多 >

    热门问题