我正在为我正在研究的c ++库编写python绑定。该库读取一些二进制文件格式,读取速度非常重要。在优化库的速度时,我注意到std :: vector(在我正在阅读的实例中使用)占用了大量的处理时间,所以我用新的[]分配了简单的数组(不管这是不是好的/明智的事情可能是另一个问题。)
现在我遇到了如何让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包装Instance
的{{1}}数组?
答案 0 :(得分:4)
如果您更改类以使用std::vector
实例,请查看向量索引套件(http://www.boost.org/doc/libs/1_41_0/libs/python/doc/v2/indexing.html),它允许您使用本机列表界面向python公开向量,而无需创建复制到/到python。
答案 1 :(得分:1)
我将使用代理类推荐一个wrap数据和dataLength,并从Instance这个代理返回。在我们的项目中,我们使用这种方式将数据从我们的应用程序导出到python。
如果您愿意,我可以为您提供一些指向我们实施的链接,并解释它是如何运作的。