Повысьте Python, вызывая функции C++ из Python при внедрении
В настоящее время у меня есть следующее:
namespace py=boost::python;
//C++
void f() {
std::cout << "hello world\n";
}
//I am not precious about this, if it can be done without a module that would be great
BOOST_PYTHON_MODULE(test)
{
py::def("f", f);
}
int main() {
auto main_module =py::import("__main__");
auto main_namespace =main_module.attr("__dict__");
//???????
auto result=py::exec_file("t.py", main_namespace);
}
//t.py
f()
Я пытаюсь вызвать f, но я не уверен, что клей необходим для того, чтобы заставить его работать. С классами я могу сделать
int main() {
//...
py::obejct p_my_type=py::class_<my_type>("my_type").def("f", &my_type::f);
main_namespace["my_type"]=p_my_type;
//...
тем не мение boost::python::def
не появляется, чтобы вернуть boost::python::object
лайк class_
делает
Мои вопросы: как мне заставить первый контрольный пример работать как положено? И, во-вторых, является ли способ, которым я выставляю свои типы во втором фрагменте кода, "правильным"?
1 ответ
Решение
Исправление было простым, но не упоминалось в документе на этой странице:
http://www.boost.org/doc/libs/1_55_0/libs/python/doc/tutorial/doc/html/python/embedding.html
Мне нужно было сделать это:
auto main_module =py::import("__main__");
auto main_namespace =main_module.attr("__dict__");
inittest();
auto result=py::exec_file("t.py", main_namespace);
from test import f
f()