私はC++オブジェクトを持っており、参照/ポインタを組み込みのPythonインタプリタに渡したいので、Pythonがその両方を見ることができるようにC++とPythonです。私はinteropのためにBoost.Pythonを使用しています。C++オブジェクトをBoost.Pythonを使ってPythonインタプリタへの参照/ポインタを渡す
例のために、ここでクラスFoo
、そのBoost.Pythonラッパー、及びC++でFoo
目的である:
mymodule.h:
struct Foo
{
int bar;
Foo(int num): bar(num) {}
};
がmymodule.cppが:
#include "mymodule.h"
#include <boost/python.hpp>
BOOST_PYTHON_MODULE(mymodule)
{
using namespace boost::python;
class_<Foo>("Foo", init<int>())
.def_readwrite("bar", &Foo::bar)
;
}
main.cppに:C++と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;
}
それでは、どのように私は、Pythonにfoo
の参照を送信するのですか?