問題タブ [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++ - 関数引数の部分結合
残りの引数を明示的に指定せずに、呼び出し可能なオブジェクト (関数など) の最初/最後のn 個の引数を部分的にバインドする方法はありますか?
std::bind()
すべての引数がバインドされている必要があるようです。残されるものstd::placeholders::_1
は 、など _2
にバインドする必要があります。_3
bind_first()
最初/最後の引数から始まる部分バインディングの/を記述してbind_last()
、残りのバインドされていない引数のプレースホルダーを元の順序で元の位置に自動的に挿入することは可能ですか?
c++ - c++ 11バインドして適用しますか?
std::bind
「部分適用」と表現されることもあります。関数のすべてのパラメーターがバインドされている場合、関数自体が適用されない理由はありますか?
たとえば、次のコードは何も出力しません。
すべてのパラメーターが固定されているときに関数を適用できるバインド バリアントを作成する方法はありますか?
- アップデート -
今の回答から、それstd::bind
は完全に部分的な適用ではないことがわかりました。したがって、質問の2番目の部分では、 std::bind のようなものをどのように記述できますが、部分的な適用を行いますか? bind(bind(f,1,_1),"Hi!")()
最終的な 0-ary 関数を呼び出して結果の値を返すことはわかっています (1Hi
例では表示しています)。バインドの端末ケースで関数呼び出し演算子()を呼び出すテンプレートプログラミングを行うことは可能ですか?
言い換えれば、関数を書くことは可能ですかbind1
:
のstd::is_placeholder<T>::value == 0
各メンバーに対してargs
、
bind1()
何に加えてstd::bind()
、operator() を呼び出すことができますか?
c++ - C++11 std::bind およびコールバック関数パラメーターの auto でのコンパイル エラー
こんにちは、次のコードのコンパイルで問題が発生しています。auto と std::bind を使用して、コールバック関数を引数にバインドしています。ただし、このコールバック関数をパラメーターとして渡すと、コンパイルに問題が発生します。以下の関数宣言に問題がありますか。
コンパイル エラー ログについては、以下を参照してください。
私の質問は次のように単純化できると思いました:
次のものを正常にコンパイルするには、playSingleAd() の関数宣言はどのようにする必要がありますか?:
c++ - c++:余分なパラメータをチェックするstd::bindのようなオブジェクトを書く方法は?
http://en.cppreference.com/w/cpp/utility/functional/bindによると、std::bind
メンバー関数 operator()
...
g() の呼び出しで指定された引数の一部が、g に格納されているプレースホルダーと一致しない場合、未使用の引数が評価されて破棄されます。
例を引用すると、次のことができます。
3つ固定のところを5つのパラメータを持つ関数として扱うと、常識的に3つのパラメータでf1
呼び出すことはできないはずです。f1
ただし、上記のコードに示されているように、余分なパラメーターは黙って無視されるため、そうすることができます。
なぜバインドから返されたオブジェクトは余分な引数を無視するのですか? 、実装するのが便利なため、この動作が存在するようです??.
私にとって、これは関数のアリティ (上記の例では 5 - 3 = 3) を台無しにし、関数呼び出しについての推論を無効にするため、やや混乱するライブラリ機能です。この種の動作が実際に有益な実用的なユースケースがあるかどうか疑問に思っていましたか?
std::bind
さらに重要なことに、この動作を禁止するバリアントを実装することは可能ですか? ここでの可能性と困難は何ですか。
ありがとう
c++ - 遅延関数呼び出しでの遅延関数呼び出し
基本的に私がやりたいことはこれです:
明らかにこれはうまくいきません。関数が発生する直前に発生するように、何らかの方法でgetInt
呼び出しをラップする必要があります。std::plus
その後、私が電話するまですべてを遅らせる必要がありますdelayedAdd
。
QObject の外で Qt5.0 を使用しているためconnect
、ラムダをSLOT
. しかし、代わりにのconnect
ようなものが欲しいです。delayedAdd
SLOT
+タグ機能
c++ - std::bind と std::function の使用
EDIT3: 2 番目の createTriangle 関数を削除すると、機能します。では、オーバーロードされた関数をバインドするにはどうすればよいでしょうか?
次のように、1 つのパラメーターを持つ関数オブジェクトを受け取る関数があります。
std::bind でこの関数を呼び出すにはどうすればよいですか? 私はこのように試しました:
しかし、これは私にエラーを与えます:
候補テンプレートは無視されました: テンプレート引数を推測できませんでした
ClassA::createTriangle は静的関数です。
追加情報:
ClassA には別の静的 createTriangle 関数があり、最後のパラメーターが異なります。それは多分問題ですか?bind はどの createTriangle を選択すればよいかわかりませんか? 次のようになります。
c++ - C++11 std::bind の動作がおかしい
これは、main() に示されている動作原理のイベント マネージャーです。したがって、コード:
出力は次のとおりです。
void SomeCallback(int, float): 12 1.0
void SomeCallback(int, float): 12 1.0
行を交換した場合:
出力は次のようになりました。
void SomeCallback(int, float): 10 10600.0
void SomeCallback(int, float): 10 10600.0
デバッガーは、m_Queue のすべてのデータが正しいことを示しています。
つまり、キュー内のデータは次のようになります。
最初: func: void(int,float); パラメータ: 12, 1.0f;
2番目: func: void(int,float); パラメータ: 10, 10600.0f;
どうしたの?どこがエラー?
PS私はnew std::function<void()>;
バグを解決しようとするだけです...
Visual Studio 2013 (12.0.30..)
c++ - この例 (メンバー関数) でプレースホルダーがないと std::bind が機能しないのはなぜですか?
たとえば、これは私のメンバー関数です ( do_it
):
...そして、私はstd::bind
それを非メンバー関数のように見せるために使用します:
動作しません。次はコンパイラ エラー メッセージです。
次を使用して修正する必要がありますstd::placeholders
。
を指定しないと動作しないのはなぜstd::placeholders
ですか?