問題タブ [boost-function]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1789 参照

c++ - C++ 仮想関数呼び出しと boost::function 呼び出しのスピードワイズ

同じ boost::function 呼び出しと比較した場合、単一継承の仮想関数呼び出しがどのくらい速いか知りたいと思っていました。それらはパフォーマンスがほぼ同じですか、それともboost::functionの方が遅いですか?

パフォーマンスはケースごとに異なる場合があることは認識していますが、一般的なルールとして、どちらがより高速で、どの程度ですか?

ありがとう、ギエルメ

- 編集

KennyTM のテストは、私にとって十分に説得力がありました。私自身の目的では、boost::function は vcall よりもそれほど遅くはないようです。ありがとう。

0 投票する
2 に答える
4863 参照

c++ - 未解決の外部シンボル「public:void__thiscall...」

関数をコンストラクターboost::functionに渡して、その関数を保持できるようにするために使用しています。Buttonそれがアクティブ化されるたびにそれを呼び出します。

TitleStateで、このようなボタンを作成しました。

ここで、ButtonActionは、static voidTitleStateのヘッダーに非公開で保持されている関数であり、実装ファイルでstd :: coutを介してコンソールに出力するだけであると定義されています(動作しているかどうかのテストとして)。

私のコードでは、TitleStateのHandleEvents関数でマウスがボタンをクリックすると、プログラムはそのボタンのActivate関数を次のように呼び出します。

問題は、プログラムがリンクしようとすると、このエラーが発生することです。

unresolved external symbol "public: void __thiscall Button::Activate(void)" (?Activate@Button@@QAEXXZ) referenced in function "public: virtual void __thiscall TitleState::HandleEvents(void)" (?HandleEvents@TitleState@@UAEXXZ)

リンカが関数の定義を見つけられないこと以外に、何が問題なのかわかりません。すべてが#included適切に宣言されているか、宣言されています。どんな援助も大歓迎です。ありがとう。

PS BoostProインストーラーを使用したとき、私はシングルスレッドのものだけをインストールし、マルチスレッドのものはインストールしませんでした。これが機能しない理由でしょうか?ライブラリがさまざまな方法でリンクしている場合、リンカーの問題が発生する可能性があることを読みました。これが問題になる可能性がある場合は、SFMLライブラリも使用していることを追加します。

0 投票する
3 に答える
123167 参照

c++ - メンバー関数でブーストバインドを使用する方法

次のコードにより、cl.exeがクラッシュします(MSVS2005)。
ブーストバインドを使用して、myclassのメソッドを呼び出す関数を作成しようとしています。

私は何が間違っているのですか?

0 投票する
2 に答える
3933 参照

c++ - boost :: bindのテンプレート関数のオーバーロードを強制する方法は?

(boost / Algorithm / stringライブラリから)と一緒にstd::find_if使用して述語を作成しようとしています。次のスニペットは、私がこれを達成しようとしている2つの方法を示しています。boost::bindboost::contains

このコードをg++3.4.5でコンパイルすると、次の出力が得られます。

boost::icontainsオーバーロードが1つしかないものに切り替えると、すべてが正常に機能します。非テンプレート関数のオーバーロードが複数ある場合に、同様の状況を解決する方法を知っています。誰かが私がこれを正しく書くのを手伝ってもらえますか?または、独自の比較関数を作成する必要がありますか?

0 投票する
2 に答える
13915 参照

function - boost :: function引数のデフォルト値?

エラー状態を報告するためのコールバックとして、オプションのboost::function引数を取りたい関数があります。デフォルト値を使用してオプションにすることができる特別な値はありますか?

たとえば、通常の関数ポインタを使用すると、次のことができます。

関数ポインタを置き換えるboost::functionで同様のことを行うことはできますか?

0 投票する
2 に答える
2745 参照

c++ - boost::bind をコピー不可能なパラメーター (boost::promise など) で使用するにはどうすればよいですか?

一部の C++ オブジェクトにはコピー コンストラクターがなく、ムーブ コンストラクターがあります。たとえば、boost::promise です。移動コンストラクターを使用してこれらのオブジェクトをバインドするにはどうすればよいですか?

0 投票する
1 に答える
797 参照

c++ - Boostテンプレートパラメータに見られるC++の奇妙な構文

Boostの「Function」クラスのドキュメントを見ていて、これに出くわしました。

この構文は私にとって非常に混乱していることを認めなければなりません。これはどのようにして合法的なC++になりますか?

ボンネットの下に何かトリックはありますか?この構文はどこかに文書化されていますか?

0 投票する
2 に答える
374 参照

function-pointers - boost :: functionおよびplain関数ポインター:あいまいなオーバーロード

次のメンバー関数のオーバーロードが与えられ、さまざまなファンクターを取得します

と機能

では、なぜbazの単純な関数ポインタを取るのでしょうか。

このエラーが発生します:

このあいまいさを解決する方法は?

0 投票する
1 に答える
697 参照

c++ - std::tr1::function::targetおよび共分散/反分散

私は C# と C++ の両方でプログラミングするのが好きなので、計画中の C++ SFML-GUI の強固な基盤として、C# のようなイベント システムを実装しようとしています。

これは私のコードの抜粋に過ぎず、これが私の概念を明確にすることを願っています:

ご覧のとおり、boost::signal を実際のイベント システムとして使用していますが、イベント リスナーが operator() を介してイベントを発生させないように、IEvent インターフェイス (実際には抽象クラス) でカプセル化しています。

便宜上、加算代入演算子と減算代入演算子をオーバーロードしました。IEventListener からイベント リスニング クラスを派生させれば、シグナル内で関数ポインターがぶら下がっていることを気にせずにコードを記述できます。

これまでのところ、結果をテストしていますが、次のことに問題がありstd::tr1::function::target<TFuncPtr>()ます。

このEventHandler<TEventArgs>::target<TFuncPtr>()メソッドは、共分散に関係なく、TFuncPtr が Functor に格納されている型とまったく同じ型である場合にのみ、有効なポインターを返します。RTTI チェックのため、標準の弱く型付けされた C 関数ポインターとしてポインターにアクセスすることは禁止されています。

EventHandler は DerivedEventArgs 型ですが、関数がコンストラクターを介して実行されたとしても、pfnBaseEventHandler 関数を指しています。

つまり、 std::tr1::function 自体が反変性を「サポート」していますが、その型がわからない場合、 std::tr1::funcion オブジェクトから関数ポインターを単純に取得する方法を見つけることができませんテンプレート引数に必要なコンパイル時。

このような場合、RAII ポインター型の場合と同様に単純な get() メソッドを追加していただければ幸いです。

私はプログラミングにまったく慣れていないので、できればテンプレートを介してコンパイル時にこの問題を解決する方法があるかどうかを知りたいです (これが唯一の方法だと思います)。

0 投票する
1 に答える
1203 参照

c++ - C++ Boost 関数の比較

引数の 1 つとして boost::function を含むクラスがあります。このクラスの同等性を比較可能にする必要がありますが、boost::function は同等性を比較できません。この問題の簡単な回避策はありますか?

ありがとう、ゴクル。