gpt4 book ai didi

c++ - 修改 Boost Python 包装器类?

转载 作者:搜寻专家 更新时间:2023-10-31 01:50:45 25 4
gpt4 key购买 nike

如何访问已为给定 C++ 类注册的 boost::python::class_ 对象?我正在导入一个 boost::python 模块,它为 boost::property_tree::ptree 定义了一个包装器,但我想向这个包装器定义添加其他方法。当我尝试创建一个新的包装器时,Boost Python 提示说已经声明了一个处理程序,并忽略了我的新定义。

有什么想法吗?

最佳答案

按照 daramarak 的建议以及 Boost Python 教程 Extending Wrapped Objects In Python ,我从 python 中扩展了类。 Python 和 Boost::Python 对绑定(bind)成员函数和第一个参数是对象引用(或指针)的函数几乎没有区别。因此,您可以像这样在 C++ 中定义一个函数:

bool ptree__contains(boost::property_tree::ptree* self, const std::string& key) {
return self->find(key)!=self->not_found();
}

然后像这样在 Python 中扩充导入的类:

from other_module import ptree
from my_module import ptree__contains

# The __contains__ method is a special api function
# that enables "foo in bar" boolean test statements
ptree.__contains__ = ptree__contains

test_ptree = ptree()
test_ptree.put("follow.the.yellow.brick.road", "OZ!")

print "follow.the.yellow.brick.road" in test_ptree
# > true

我将我的扩充代码添加到我的模块的 __init__.py 中,这样我的模块的任何导入都会自动将所需的方法添加到外部对象。我定义了一个修改类的函数,调用这个函数,然后删除它以清理我的命名空间。或者,您可以从 __all__ 列表中排除此函数,以防止它被 from module import * 语句导出。奇迹般有效!再次感谢 daramarak。

关于c++ - 修改 Boost Python 包装器类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14686176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com