从C++传递指针到Python /W Boost Python?

2024-10-01 07:21:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Boost Python,我在C++中生成了一个大的整数向量,我想在Python中访问这个向量而不复制它。在

在C++中,我有:

BOOST_PYTHON_MODULE(myModule)
{
    class_<vector<int>>("vectorInt").def(vector_indexing_suite<vector<int>>());
    def("ReturnVectorPtr", ReturnVectorPtr, return_value_policy<manage_new_object>());
}

vector<int>* ReturnVectorPtr()
{
    return new vector<int>();
}

在python中我有:

^{pr2}$

这会导致Python崩溃,尽管我甚至没有存储返回值。你知道我的错误是什么吗?在

编辑:

以下代码用于将向量中的数据从C++到Python,但泄漏内存。向量是否被复制然后不被处理?在

C++中的P>:

BOOST_PYTHON_MODULE(myModule)
{
    class_<vector<int>>("vectorInt").def(vector_indexing_suite<vector<int>>());
    def("ModifyVectorInPlace", ModifyVectorInPlace);
}

void ModifyVectorInPlace(vector<int>& data)
{
    // Modify data...
    return;
}

在python中我有:

import myModule
vectorInt = myModule.vectorInt()
myModule.ModifyVectorInPlace(vectorInt)

怎么回事?在

编辑2:

<>我试过这里的“原始C++指针”例子,完全是写的: https://wiki.python.org/moin/boost.python/PointersAndSmartPointers

它也崩溃了。由于某种原因,我似乎无法获取传入Python的任何内容的指针。。。在

编辑3:

坠机似乎是调用.hpp,在此函数中:

template <class RC, class F BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class AC)>
inline PyObject* invoke(invoke_tag_<false,false>, RC const& rc, F& f BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(1, N, AC, & ac) )
{
    return rc(f( BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, ac, () BOOST_PP_INTERCEPT) ));
}

Tags: 编辑returndefenumparams向量classpp