2011-09-14 53 views
3

有沒有人知道任何可以用來替代Boost :: Function和Boost :: Bind的庫?我們正試圖移除對Boost的依賴,因爲它是一個非常大的庫。我們正在尋找更專注的東西。Boost :: Function和Boost :: Bind的替代品::

我發現這一點: http://www.codeproject.com/KB/cpp/fastdelegate2.aspx

我從來沒有使用過它,雖然它看起來就像是最後更新於2007年有沒有人用過嗎?

我們在整個代碼中都使用回調函數,boost :: function和boost :: bind允許我們這樣做。但是我們遇到了使用Boost將RTTI和異常關閉的問題。所以任何替換都需要在RTTI中可用,並關閉異常。

謝謝!

+5

你可以使用'std :: function'和'std :: bind' :-) –

+2

是不是C++ 11?我應該更清楚一點。我們仍然使用C++ 03。 – alk3ovation

+0

我不記得是否使用fastdelegate或者只是評估它,因爲這是幾年前。不過,我認爲這是一個很好的選擇。 –

回答

2

您指出的實現建立在根據標準的未定義行爲上。只要您定義了您自己的throw_exception函數,禁用異常就不會出現Boost.Function問題。我確定禁用RTTI也不會成爲問題,因爲Boost.Function經歷了很大的麻煩以避免虛擬功能(它的所有原因都被解釋了)。對於某些Boost庫禁用異常和RTTI存在問題,但功能和綁定不是這種情況,我一直在Android NDK中將它們用於禁用異常和RTTI很長一段時間。至於替代方案,你可以使用現在標準的C++ 11(基於Boost),它們已經在幾個編譯器中可用;或者你總是可以推出自己的。 Domagoj Saric還提供了Boost.Function的替代實現,但我現在似乎無法找到指針。

檢出Boost bcp工具,僅提取與Function和Bind相關的文件,並在您自己的版本上滾動。你不需要爲他們改變任何工作。

+0

NDK是我們計劃使用它們的地方。至於定義你自己的throw_exception函數,最好的地方在哪裏呢? – alk3ovation

+0

在它自己的頭文件中,在項目中的任何其他文件包含'include'd之前,在任何其他文件之前。 –

+0

這個錯誤是由於沒有做到這一點:錯誤的codegen,指針差異在__ZN5boost9exceptionC2Ev全局弱符號__ZTVN5boost9exceptionE架構i386 – alk3ovation

1

我已經使用sigslot庫有好結果。這是一個非常輕量級的庫,它只包含一個頭文件。它和STL很好,並且對Windows線程和pthreads有可選的多線程支持。

0

有一個bcp工具,它允許你複製你需要的boost庫的一部分。

有沒有必要找到提升的替代品。這是一個很棒的圖書館。如果有任何圖書館存在,它是世界上最好的。可能有一些例外,如boost.test,但通常情況是這樣。對boost.function和boost.bind尤其如此。