問題タブ [stdbind]

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 投票する
3 に答える
974 参照

c++ - std :: bind(x、y)は一体何をしますか?

std::bindN3225のサブセクションの説明を読んで行き詰まってい20.8.10.1ます。以下は印刷する必要があると書かれていますが、それはその引数をコピーすることになっているので、印刷する必要1があると思いました。渡された引数を参照したい場合は、を使用する必要がありますよね?bind0std::ref

GCCの出力0は、私が物事がうまくいくと思ったことに同意します。しかし、N3225は、std::bind(f, a1)によって呼び出されたときに、を呼び出す呼び出しラッパーを返すと言っていwrapper()ますINVOKE(f, v1)。ここで、 (v1aが渡した引数、つまり、binds完全な転送パラメーターであるの着信パラメーターを使用しますstd::forward<A1>(a1))。

INVOKE(f, a)20.8.2から。で定義されf(a)ます。したがって、これは、返された呼び出しラッパーへの呼び出しが元の引数を渡すことを定義します。私は何が欠けていますか?

0 投票する
4 に答える
3816 参照

c++ - 右辺値参照用のreference_wrapper<>はありますか?

どうすれば次のことができるのだろうか

右辺値参照を渡して、それを右辺値参照(おそらくラップされている)として呼び出しラッパーに格納するにはどうすればよいですか?std::reference_wrapper<>に変換関数を持つようなクラスを手動で作成できることは知っていますがT&&、それを避けて標準テクノロジを使用したいと思います。


AProgrammerが推奨するように実装しました。

今私は言うことができます

左辺値をに渡すmake_advと、入力引数を参照する左辺値として転送されるためstd::ref、この場合は、の代わりに使用できます。

0 投票する
4 に答える
113028 参照

c++ - std::function と std::bind: それらは何ですか? また、いつ使用する必要がありますか?

ファンクターとは何か、アルゴリズムでいつ使用するかは知っていますstdが、Stroustrup がC++11 FAQでファンクターについて何を言っているのか理解できません。

誰が何std::bindstd::functionいつ使用すべきかを説明し、初心者向けの例をいくつか挙げることができますか?

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

c++ - std::bind された関数に std::move する必要がないのはなぜですか?

右辺値参照を取る関数があるとしましょう:

...そして、その 1 つのパラメーターをプレースホルダーにバインドします。

私はこのような呼び出しを試みましたが、結果は私が期待していたものとは逆です。

これはコンパイラのバグですか? または、動作中の呼び出しは安全でないコードですか? std::moveまたは、バインドされた関数へのこのポインターを必要としないのはなぜですか?

ちなみに、gcc4.4 でのコンパイル エラーは次のとおりです。

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

c++ - C ++:std::bindの結果の引数を取得します

まず、少し背景があります。私の仕事では、後で呼び出されるようにコールバックをバインドします。これにより、ログを介した制御フローの追跡が非常に困難になる可能性があります。これを支援するために、「ログコンテキスト」を使用します。これにより、システムを通過するリクエストを追跡できます。静的関数を使用して現在のコンテキストをコピーし、静的関数log_context::get_currentを使用して復元できますlog_context::set_current。これにより、コールバックをワーカーキューに投稿するたびに、多くのコードが繰り返されることになります。

ドロップインの代わりとstd::bindなる関数を作成して、現在の関数を保存し、log_context呼び出されたときに復元したいと思います。しかし、私はそれを書くのに苦労しています。

現在、関数は次のようになっています。

それは機能しますが、問題は、実際の理由なしに関数型を渡す必要があるということです(それ以外は、何を使用するかを見つける方法ですTFuncArgs):

したがって、ドロップインの代替品ではありません。コンパイル時にこの情報を知っておく必要があるようですが、どうすればよいかわかりません。ほぼそこにあります。 関数のタイプを渡す必要をなくすにはどうすればよいですか?


私の最初の考えは、バインディングを次のような関数に変換することから分割することでした。

問題は、キャスト(operator std::function<TReturn (TFuncArgs...)>() const)が(与えられたint foo(int x, int y, int z))と呼ばれることは決してないということです。

その理由は、コンストラクターが(持っていなくても)からfunction取得しようとしているためです。operator ()context_binder

したがって、このほぼ解決策に対する私の質問は、のコンストラクターを使用する代わりに、キャストアウト演算子を優先する方法はありますか?g++function

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

c++ - テンプレート化された関数呼び出しをバインドして渡す

これは機能しません: http://ideone.com/mUL5Y

そのタイプを差し引くのに少し役立ったと思います: http://ideone.com/mGfUj

どちらも機能しません!なぜだかわかりません。

どうすればいいですか?

0 投票する
4 に答える
7933 参照

c++ - mem_fn と bind の実用的な使い方

tr1 の mem_fn および bind ユーティリティのクールで実用的な使い方を誰かが推奨できますか? ライブラリ開発に難解な c++ は必要ありません。これらを利用するアプリケーションレベルのコーディングです。

どんな助けでも大歓迎です。

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

c++ - boost::bind から std::bind への移行: コンパイル エラー

私はこのコードを構築して完全に実行しました:

上記のコードを喜んで変更booststdたところ、次のエラーが発生し始めました (私のコンパイラは Visual Studio 2010 SP1 のものです)。

どうしたの?Boostヘッダーへの参照を削除する必要がありますか?

0 投票する
4 に答える
21834 参照

c++ - C ++ 11 std::bindとboost::bindの違い

両者に違いはありますか?または、コード内のすべての出現箇所を置き換えて、Boostへの依存を削除しても安全boost::bindですstd::bindか?