【问题标题】:Boost.Python return python object which references to existing c++ objectsBoost.Python 返回引用现有 c++ 对象的 python 对象
【发布时间】:2018-09-16 10:40:09
【问题描述】:
假设我想获取某个全局/内部 c++ 对象的引用,一种方法是使用boost::python::return_value_policy<reference_existing_object>() 声明函数。
GetGlobalObjectA 和 GetGlobalObjectB 都返回对原始 c++ 对象的引用而不创建新副本;
但是如何让GetGlobalObjectByID返回一个对现有c++对象的引用呢?
结构 A { uint32_t 值; };
结构 B { uint64_t 值; };
一个全局A;
B全球B;
boost::python::object GetGlobalObjectByID(int id)
{
// boost::python::object 将返回 C++ 对象的新副本,而不是全局对象。
如果(id == 1)
返回 boost::python::object(&globalA);
否则如果(id == 2)
返回 boost::python::object(&globalB);
别的
返回 boost::python::object(nullptr);
}
A& GetGlobalObjectA() { return globalA; }
B& GetGlobalObjectB() { return globalB; }
BOOST_PYTHON_MODULE(我的模块)
{
使用命名空间 boost::python;
class_<A>("A");
class_<B>("B");
def("GetGlobalObjectByID", GetGlobalObjectByID);
def("GetGlobalObjectA", GetGlobalObjectA, return_value_policy<reference_existing_object>());
def("GetGlobalObjectB", GetGlobalObjectB, return_value_policy<reference_existing_object>());
}
【问题讨论】:
标签:
python
c++
boost
boost-python