1

我目前正在为我正在开发的 c++ 库编写 python 绑定。该库读取一些二进制文件格式,读取速度非常重要。在优化库以提高速度时,我注意到 std::vector (在我正在阅读的实例中使用)占用了大量的处理时间,所以我用 new[] 分配的简单数组替换了那些(无论这是好的/明智的做法可能是另一个问题)。

现在我遇到了如何让 python 访问这些数组的问题。boost::python 中似乎没有内置解决方案(我至少找不到一个)。

示例代码来说明情况:

// Instance.cpp
class Instance
{
    int * data;
    int dataLength;
    Instance ()
    {
        data = new int[10];
        dataLength = 10;
    }
};

// Class pythonBindings.cpp
BOOST_PYTHON_MODULE(db)
{
    class_<Instance>("Instance", init<>())
        .add_property("data", ........)
    ;
}

我想我可以使用一个包装函数,只要 python 想要访问它们,就可以从数组中构造一个 boost::python::list 。由于我对 boost::python 还很陌生,所以我想在开始破解之前,我应该询问是否有任何好的、标准或内置的解决方案来解决这个问题。

那么,你会如何推荐使用 boost::python 包装数组呢Instancedata

4

2 回答 2

4

如果您将类更改为使用std::vector实例,请查看向量索引套件(http://www.boost.org/doc/libs/1_41_0/libs/python/doc/v2/indexing.html),它允许您可以使用本机列表接口向 python 公开向量,而无需从 python 创建副本。

于 2010-01-22T18:37:57.787 回答
1

我将推荐一个带有代理类的包装数据和数据长度,并从实例返回这个代理。在我们的项目中,我们使用这种方式将数据从我们的应用程序导出到 python。

如果你愿意,我可以给你几个链接到我们的实现,并解释它是如何工作的。

于 2009-12-11T11:18:26.947 回答