2011-09-14 22 views
3

Boost :: FunctionとBoost :: Bindの代わりに使用できるライブラリは誰も知っていますか?私たちはかなり大きなライブラリなので、Boostへの依存を取り除こうとしています。私たちはもっと焦点を絞ったものを探しています。 http://www.codeproject.com/KB/cpp/fastdelegate2.aspxBoost :: FunctionとBoost :: Bindの代替手段

は、私もそれを使ったことがないし、誰もがそれを使用していた2007年に最後に更新されたように見えます:

私はこれを見つけましたか?

私たちは、コード全体でかなりの量のコールバックを使用しています。boost :: functionとboost :: bindでは、そうすることができます。しかし、Boostを使用してRTTIと例外をオフにする問題が発生しました。 RTTIと例外を無効にして使用する必要があります。

ありがとうございます!

+5

'std :: function'と' std :: bind'を使うことができます:-) –

+2

C++ 11ではないですか?私は少しはっきりしていたはずです。私たちはまだC++ 03です。 – alk3ovation

+0

2年前と同じように、私がfastdelegateを使用したのか、それとも評価したのかは分かりません。しかし、私はそれが良い選択だと思った。 –

答えて

2

あなたが指摘した実装は、規格に従って未定義の動作に基づいています。 Boost.Functionでは、独自のthrow_exception関数を定義する限り、例外を無効にする必要はありません。 Boost.Functionは仮想関数をまったく避けるために大きな問題を抱えているので、RTTIを無効にすることも問題ではないと確信しています(そのすべてがその根拠で説明されています)。いくつかのBoostライブラリでは例外やRTTIを無効にすることに問題がありますが、FunctionとBindはそうではありません。私はAndroid NDKで無効な例外とRTTIを使っています。

代替手段としては、既にいくつかのコンパイラで利用可能な、現在の標準のC++ 11(Boostに基づいています)をいつでも使用できます。あなたはいつも自分のロールを張ることができます。また、Boost.Functionの代わりの実装がDomagoj Saricによってありますが、私は今、それへのポインタを見つけることができないようです。

「機能とバインド」に関連するファイルのみを抽出し、独自のバージョンをロールオーバーするには、「ブーストbcp」ツールを参照してください。あなたが働くために何かを変更する必要はありません。

+0

NDKは、それらを使用する予定です。あなた自身のthrow_exception関数を定義する限り、それを行うための最良の場所はどこですか? – alk3ovation

+0

それ自身のヘッダーファイルでは、プロジェクト内の他のファイルによって 'include'dが取得されます。 –

+0

このエラーは、コードネームが正しくありません。悪いcodegen、__ZN5boost9exceptionC2Evのグローバルな弱いシンボルへのポインタdiff __ZTVN5boost9exceptionE for architecture i386 – alk3ovation

1

sigslotライブラリを使用すると良い結果が得られました。これは非常に軽量のライブラリであり、ただ1つのヘッダーファイルで構成されています。それはSTLとうまくやっており、Windowsのスレッドとpthreadのためのオプションのマルチスレッドサポートを持っています。

0

bcpツールがあり、必要なブーストライブラリの一部をコピーすることができます。ツールがあります。

ブーストの代替手段を見つける必要はありません。これは素晴らしい図書館です。そこにライブラリがあれば、それは世界で最高です。おそらくboost.testのようないくつかの例外がありますが、一般的にはそれは本当です。特に、boost.functionとboost.bindについては真です。