問題タブ [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.
c++ - std :: bind(x、y)は一体何をしますか?
std::bind
N3225のサブセクションの説明を読んで行き詰まってい20.8.10.1
ます。以下は印刷する必要があると書かれていますが、それはその引数をコピーすることになっているので、印刷する必要1
があると思いました。渡された引数を参照したい場合は、を使用する必要がありますよね?bind
0
std::ref
GCCの出力0
は、私が物事がうまくいくと思ったことに同意します。しかし、N3225は、std::bind(f, a1)
によって呼び出されたときに、を呼び出す呼び出しラッパーを返すと言っていwrapper()
ますINVOKE(f, v1)
。ここで、 (v1
私a
が渡した引数、つまり、binds
完全な転送パラメーターであるの着信パラメーターを使用しますstd::forward<A1>(a1)
)。
INVOKE(f, a)
20.8.2から。で定義されf(a)
ます。したがって、これは、返された呼び出しラッパーへの呼び出しが元の引数を渡すことを定義します。私は何が欠けていますか?
c++ - 右辺値参照用のreference_wrapper<>はありますか?
どうすれば次のことができるのだろうか
右辺値参照を渡して、それを右辺値参照(おそらくラップされている)として呼び出しラッパーに格納するにはどうすればよいですか?std::reference_wrapper<>
に変換関数を持つようなクラスを手動で作成できることは知っていますがT&&
、それを避けて標準テクノロジを使用したいと思います。
AProgrammerが推奨するように実装しました。
今私は言うことができます
左辺値をに渡すmake_adv
と、入力引数を参照する左辺値として転送されるためstd::ref
、この場合は、の代わりに使用できます。
c++ - std::function と std::bind: それらは何ですか? また、いつ使用する必要がありますか?
ファンクターとは何か、アルゴリズムでいつ使用するかは知っていますstd
が、Stroustrup がC++11 FAQでファンクターについて何を言っているのか理解できません。
誰が何std::bind
をstd::function
いつ使用すべきかを説明し、初心者向けの例をいくつか挙げることができますか?
c++ - std::bind された関数に std::move する必要がないのはなぜですか?
右辺値参照を取る関数があるとしましょう:
...そして、その 1 つのパラメーターをプレースホルダーにバインドします。
私はこのような呼び出しを試みましたが、結果は私が期待していたものとは逆です。
これはコンパイラのバグですか? または、動作中の呼び出しは安全でないコードですか? std::move
または、バインドされた関数へのこのポインターを必要としないのはなぜですか?
ちなみに、gcc4.4 でのコンパイル エラーは次のとおりです。
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
c++ - テンプレート化された関数呼び出しをバインドして渡す
これは機能しません: http://ideone.com/mUL5Y
そのタイプを差し引くのに少し役立ったと思います: http://ideone.com/mGfUj
どちらも機能しません!なぜだかわかりません。
どうすればいいですか?
c++ - mem_fn と bind の実用的な使い方
tr1 の mem_fn および bind ユーティリティのクールで実用的な使い方を誰かが推奨できますか? ライブラリ開発に難解な c++ は必要ありません。これらを利用するアプリケーションレベルのコーディングです。
どんな助けでも大歓迎です。
c++ - boost::bind から std::bind への移行: コンパイル エラー
私はこのコードを構築して完全に実行しました:
上記のコードを喜んで変更boost
しstd
たところ、次のエラーが発生し始めました (私のコンパイラは Visual Studio 2010 SP1 のものです)。
どうしたの?Boostヘッダーへの参照を削除する必要がありますか?
c++ - C ++ 11 std::bindとboost::bindの違い
両者に違いはありますか?または、コード内のすべての出現箇所を置き換えて、Boostへの依存を削除しても安全boost::bind
ですstd::bind
か?