我目前正在为我正在编写的C++库编写python绑定。该库读取一些二进制文件格式和阅读速度非常重要。在优化库的速度时,我注意到std :: vector(用在我正在读的实例中)消耗了大量的处理时间,所以我用简单的数组替换了新的[](无论这是好的/明智的事情可能是另一个问题)。从boost python返回一个c + +数组(指针)
现在我坚持如何给这些数组的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", ........)
;
}
我想我可以用它构建一个boost ::蟒蛇::名单出来时蟒蛇想访问他们的阵列的包装功能。由于我对boost :: python相当陌生,我想我应该问在我开始黑客入侵之前是否有任何好的,标准或内置的解决方案来解决这个问题。
那么,你会如何推荐使用boost :: python包装Instance
的data
数组?
如果给它一个尺寸提示,向量不应该比数组慢。你确定你已经开启了优化器吗? (这是一个容易犯的错误。) – 2009-09-11 12:41:41
好的一点,虽然检查我的初始版本,我注意到,我没有指定初始大小和使用push_back代替。我会看到它使用正确的std :: vector运行得有多快。谢谢! – 2009-09-11 12:49:48
事实证明,更改为c风格的数组是不成熟的:使用std :: vector结果是一样快,只要您适当地使用reserve()和编译器优化。 (不知道这应该是一个评论或对我自己的问题的答案) – 2009-12-11 11:24:32