返回一个c++;boostpython中的数组(指针) 我现在正在为我正在处理的C++库编写Python绑定。库读取一些二进制文件格式,读取速度非常重要。在优化库以提高速度的同时,我注意到std::vector(在我正在阅读的实例中使用)占用了大量的处理时间,因此我用分配了新[]的简单数组替换了它们(这是否是一件好的/明智的事情可能是另一个问题)

返回一个c++;boostpython中的数组(指针) 我现在正在为我正在处理的C++库编写Python绑定。库读取一些二进制文件格式,读取速度非常重要。在优化库以提高速度的同时,我注意到std::vector(在我正在阅读的实例中使用)占用了大量的处理时间,因此我用分配了新[]的简单数组替换了它们(这是否是一件好的/明智的事情可能是另一个问题),python,boost,binding,boost-python,Python,Boost,Binding,Boost Python,现在我遇到了如何让python访问这些数组的问题。在boost::python中似乎没有内置的解决方案(我至少还没有找到) 用于说明这种情况的示例代码: // Instance.cpp class Instance { int * data; int dataLength; Instance () { data = new int[10]; dataLength = 10; } }; // Class pythonBind

现在我遇到了如何让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", ........)
    ;
}
//Instance.cpp
类实例
{
int*数据;
int数据长度;
实例()
{
数据=新整数[10];
数据长度=10;
}
};
//类pythonBindings.cpp
BOOST_PYTHON_模块(db)
{
类(“实例”,init())
.添加_属性(“数据”、……)
;
}
我想我可以使用一个包装器函数,每当python想要访问数组时,它就从数组中构造一个boost::python::list。因为我对boost::python还很陌生,所以我想在开始破解之前,我应该问问是否有任何好的、标准的或内置的解决方案来解决这个问题


那么,您建议如何使用boost::python包装
实例
数据
数组?

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


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

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


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

如果你把你的类改为使用
std::vector
实例,看看vector indexing suite(),它允许你用本机列表接口向python公开向量,无需从python创建副本。

如果您将类更改为使用
std::vector
实例,请查看vector indexing suite(),它允许您使用本机列表接口向python公开向量,不从python创建副本。

Vector不应该比array慢,如果您给它一个大小提示的话。您确定已打开优化器吗?(这是一个很容易犯的错误。)很好,在检查我的初始版本时,我注意到我没有指定初始大小,而是使用push_back。我将看看它在正确使用std::vector时运行得有多快。谢谢事实证明,更改为c样式的数组还为时过早:如果您适当地使用reserve()和编译器优化,那么使用std::vector的速度同样快。(不确定这是一个注释还是对我自己问题的回答)若你们给它一个大小提示,向量不应该比数组慢。您确定已打开优化器吗?(这是一个很容易犯的错误。)很好,在检查我的初始版本时,我注意到我没有指定初始大小,而是使用push_back。我将看看它在正确使用std::vector时运行得有多快。谢谢事实证明,更改为c样式的数组还为时过早:如果您适当地使用reserve()和编译器优化,那么使用std::vector的速度同样快。(不确定这是评论还是回答我自己的问题)