暴露多态性与boost python
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了暴露多态性与boost python,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1734字,纯文字阅读大概需要3分钟。
内容图文
![暴露多态性与boost python](/upload/InfoBanner/zyjiaocheng/787/18a33c45bb6a49c5a65e017dfb788ed0.jpg)
我开始变得非常沮丧,尝试用boost :: 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中我只想拥有以下内容:
object = returnSomethingFromDerived() #object is of type Base
if object.typeID = 1:
#here i want to cast to Derived and access "derivedProperty"
#but this is not working :-( :
object.__class__ = Derived
有没有办法实现这一点?或者这不可能像在C中一样吗?
非常感谢你的帮助!!
解决方法:
好吧,我错过了Base类中的虚拟析构函数.所以这是它的工作原理:
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>());
}
但现在我有一个不同的问题.当我尝试在元组中返回此类型时,我再次丢失类型信息:
tuple returnSomethingDerivedFromBase(...) {
Derived *ret = new Derived;
ret->derivedProperty = 1234;
return make_tuple(ret);
}
内容总结
以上是互联网集市为您收集整理的暴露多态性与boost python全部内容,希望文章能够帮你解决暴露多态性与boost python所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。