通过C&x2B+;使用Boost.Python通过引用/指针指向Python解释器的对象 我有一个C++对象,希望通过引用/指针传递给一个嵌入的Python解释器,这样Python就可以对C++和Python都可见的更改。我正在使用Boost.Python进行互操作

通过C&x2B+;使用Boost.Python通过引用/指针指向Python解释器的对象 我有一个C++对象,希望通过引用/指针传递给一个嵌入的Python解释器,这样Python就可以对C++和Python都可见的更改。我正在使用Boost.Python进行互操作,python,c++,boost,boost-python,Python,C++,Boost,Boost Python,例如,这里有一个类Foo、它的Boost.Python包装器和一个C++中的Foo对象: mymodule.h: mymodule.cpp: #包括“mymodule.h” #包括 BOOST_PYTHON_模块(mymodule) { 使用名称空间boost::python; 类(“Foo”,init()) .def_readwrite(“bar”,&Foo::bar) ; } main.cpp: #包括 #包括 #包括“mymodule.h” 使用名称空间boost::python; in

例如,这里有一个类
Foo
、它的Boost.Python包装器和一个C++中的
Foo
对象:

mymodule.h:

mymodule.cpp:

#包括“mymodule.h”
#包括
BOOST_PYTHON_模块(mymodule)
{
使用名称空间boost::python;
类(“Foo”,init())
.def_readwrite(“bar”,&Foo::bar)
;
}
main.cpp:

#包括
#包括
#包括“mymodule.h”
使用名称空间boost::python;
int main()
{
Py_初始化();
对象主模块=导入(“\uuuu主模块”);
object main_namespace=main_module.attr(“uu dict_uu”);
导入(“mymodule”);
富富(42),;
//…以某种方式使用Boost.Python将引用发送到解释器。。。
对象结果=exec_文件(“myscript.py”,主_名称空间);

STD:C++中的CUT< P>,在运行脚本之前,添加:

main_namespace["foo"] = ptr(&foo);

现在Python环境将有一个指向C++变量<代码> Foomyscript.py

为:

foo.bar = 12
然后,末尾的
cout
行的输出将是
12
,而不是
42

请注意,您可能希望将
foo
放置在
mymodule
名称空间中,以自行记录其来源,即
mymodule.foo.bar

Python文档似乎没有描述这种通过指针传递的方法,但它仍然有效

#include <iostream>
#include <boost/python.hpp>
#include "mymodule.h"

using namespace boost::python;

int main()
{
    Py_Initialize();

    object main_module = import("__main__");
    object main_namespace = main_module.attr("__dict__");
    import("mymodule");

    Foo foo(42);

    // ... somehow use Boost.Python to send reference to interpreter ... 

    object result = exec_file("myscript.py", main_namespace);

    std::cout << foo.bar << std::endl;                
}
main_namespace["foo"] = ptr(&foo);
foo.bar = 12