2014-04-01 22 views
4

我喜歡dispatch_data_t。它在一系列內存之上提供了一個有用的抽象:它提供了引用計數,允許消費者創建任意的子範圍(參與父範圍的ref計數),連接子範圍等。(我贏了' T懶得進入血淋淋的細節 - 文檔是在這裏:Managing Dispatch Data Objects是否有一個`std ::`等同於libdispatch的`dispatch_data_t`?

我一直在試圖找出是否有一個C++ 11等效,但術語「範圍」,「內存」和「引用計數」是非常通用的,這使得Google有點挑戰。我懷疑那些花更多時間在C++標準庫上的人可能比我更瞭解他們的頭腦。

是的,我知道我可以使用C++代碼中的dispatch_data_t API,是的,我知道要開始這樣一個天真的第一遍實現並不困難, m專門尋找C++的一些慣用的東西,並且具有高度的拋光/可靠性。 (升壓也許?)正在提出了未來標準的修訂

+0

我不相信標準庫有任何相當類似的東西。你可能不得不求助於第三方庫。 –

+0

您使用的是dispatch_data_t的哪些部分?如果您的需求足夠簡單,您可以將您的類基於一個簡單包含通過std :: shared_ptr使用的std :: vector的類,也許? – uliwitness

回答

4

範圍的意見,但都是非所屬。

dispatch_data_t與GCD高度相關,因爲清理髮生在創建時確定的指定隊列中:要複製該行爲,我們需要線程池和隊列std,這是我們沒有的。如你所指出的,擁有重疊的不可變範圍類型爲稀疏或連續的內存不會很難寫出來。充分發揮它必須支持分配器,某種原始輸入緩衝器系統(在擁有/銷燬機制上進行類型擦除?),具有塊的異步迭代(調整塊大小)的功能,仔細處理錯誤和異常,以及有效地將rc 1視圖轉換爲可變版本的方法。

一些複雜的東西首先必須出現在像boost這樣的圖書館中,並經歷迭代改進。由於它有很多面,因此可能已經有足夠的屬性用於您的目的。

如果你自己推出我鼓勵你提交boost考慮。

+0

假設一分鐘我不在乎'特定隊列上的銷燬'?刪除該需求是否產生可用的東西? – ipmcc

+0

@ipmcc不是我所知:這種類型有很多細節和怪癖(不變性,不連續的範圍追加,合併規則不完全清楚的接口,重新分配到連續的,具有邏輯偏移量的塊級迭代),我dount任何東西都可以完美匹配絕對不在'std'中:檢查'boost'。 – Yakk

相關問題