我目前正在爲我正在編寫的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