使用 boost python 向 python 模块添加类

Add class to python module with boost python

提问人:Lacer 提问时间:11/14/2023 最后编辑:Lacer 更新时间:11/14/2023 访问量:37

问:

我正在尝试将 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

Python C++ 提升

评论

0赞 463035818_is_not_an_ai 11/14/2023
错误是什么?
0赞 Ulrich Eckhardt 11/14/2023
是的,请添加错误消息。此外,提供一个最小的可重复示例。第一个代码和第二个代码都不能按原样编译。作为这里的新用户,也请参加导览并阅读如何提问
0赞 Lacer 11/14/2023
更改了原始消息。修改了示例,添加了错误。

答: 暂无答案