提问人:Lacer 提问时间:11/14/2023 最后编辑:Lacer 更新时间:11/14/2023 访问量:37
使用 boost python 向 python 模块添加类
Add class to python module with boost python
问:
我正在尝试将 C++ 类添加到传递给该方法的 Python 模块中。eval()
我该怎么做?
例如,当我需要添加一个简单的函数时,我使用以下代码:
#include <boost/python.hpp>
static int myFunc()
{
return 3;
}
int main()
{
auto main_module = boost::python::import("__main__");
auto main_namespace = main_module.attr("__dict__");
main_namespace["myFunc"] = boost::python::object(&myFunc);
auto evalResult = boost::python::eval("myFunc()", main_namespace);
assert((int)boost::python::extract<int>(evalResult) == 3);
}
它有效。
如何向 ?main_module
我试过这个:
#include <boost/python.hpp>
struct World
{
int myFunc()
{
return 3;
}
};
BOOST_PYTHON_MODULE(hello)
{
boost::python::class_<World>("World").def("myFunc", &World::myFunc);
}
int main()
{
auto main_module = boost::python::import("__main__");
auto main_namespace = main_module.attr("__dict__");
boost::python::exec("import hello");
auto evalResult = boost::python::eval("hello.World().myFunc()", main_namespace);
assert((int)boost::python::extract<int>(evalResult) == 3);
}
并在 上获得异常“python::throw_error_already_set()”。
如果我删除boost::p ython::exec(“import hello”);行,我在下一行得到同样的异常。import hello
答: 暂无答案
评论