問題タブ [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バインドされた関数
上記のサンプルはコンパイルされず、次のような複数のエラーが発生しますError 1 error C2780: '_Ret std::tr1::_Callable_fun<_Ty,_Indirect>::_ApplyX(_Arg0 &&,_Arg1 &&,_Arg2 &&,_Arg3 &&,_Arg4 &&,_Arg5 &&,_Arg6 &&,_Arg7 &&,_Arg8 &&,_Arg9 &&) const' : expects 10 arguments - 2 provided
。
コメント付きの行を明示的な型で使用すると、コンパイルされます。によって推測されたタイプauto
が正しくないようです。auto
この場合の問題は何ですか?
プラットフォーム:MSVC 10 SP 1、GCC 4.6.1
c++ - std::bind内の別の関数への引数として関数ポインタを渡す
渡された関数をtry-catch句内にラップしようとしています。これにより、スローされた例外をキャッチし、再スローする前にクリーンアップを実行できます。コンパイルのバグを再現するサンプルコードを作成しました。
ラムダ式またはバインド呼び出しのいずれかに関数ポインターを渡す方法がわからないようです。bound()の呼び出しでエラーが報告されているようです。誰かがアドバイスをしたり、私が誤解していることがあるかどうか教えてもらえますか?
c++ - std::bind とオーバーロードされた関数
次のコード スニペットを参照してください。std::bind
for overloaded functionを使用したいfoobar
。引数なしでメソッドのみを呼び出します。
c++ - bind から返されたオブジェクトが余分な引数を無視するのはなぜですか?
2 つの引数を取る関数があるとします。
そのうちの1つをバインドしたいと思います。std::bind
次のように使用できます。
partiallyBoundF
は引数を 1 つしか取りませんが、複数で呼び出すことができます。最初の引数を超える引数は、意味のある型である必要さえありません。
bind
から返されたオブジェクトに追加の引数を渡すことを許可する目的は何ですか? 他の場所では拒否される呼び出しエラーをコンパイルできます。
c++ - std::bind と std::shared_ptr の使用を組み合わせる方法
このようなことを頻繁に行う必要があります。
(関数オブジェクトとも呼ばれます) をAsyncOperation
実装する任意のカスタム クラスです。operator()
の代わりにstd::bind
を使用することを に示すことは可能ですか? これにより、 で参照を保持する必要なく、メモリ リークが防止され、スレッドの最後で自動的にが削除されます。つまり、この非同期タスクの最後です。std::shared_ptr
std::ref
pAsyncOperation
AsyncOperation
編集:私は常にstd::threadにアクセスできるとは限りません.スレッドライブラリはboost::threadまたはその他のプラットフォーム依存スレッドである可能性があります. 結果として、std::async にはアクセスできません。
私の主な問題は、std::bind で所有権の概念を持つことです。
c++ - __stdcall関数でstd::bindを使用する
__stdcall関数でstd::bind(boost :: bindではない)をどのように使用できますか、それとも現在の実装でも可能ですか?次の例をコンパイルしようとすると:
または同じですが、funcを次のように宣言します。
奇妙なビルド出力が表示されます(以下に含めました)。それをコンパイルさせるための非常に厄介な方法があります:
ただし、このような関数(* proc)(0,0,0);を呼び出すことはできません。それは悲しいことです。これはすべて、そのfunc(myhook)が__stdcallとして宣言されているために発生します。オフコース私はfuncの終わりに4つのdwordをプッシュするダーティアセンブリハックを書くことができ、これはそれを__stdcallにしますが、これについてはよくわかりません。また、これはさらに厄介な方法です。
c++ - std :: bind、thisおよびQtConcurrent
で使用されているメソッドstd::bind
にバインドするために使用しようとしていますthis
QtConcurrent::blockingMapped
ヘッダ:
}
ソース:
したがって、ここでImが行っているのはblockingMapped
、のそれぞれConfigNode
で同時にステップを実行することcurrentConfigs
です。std::bind
にバインドthis
するために使用してstep
いるので、のドキュメントのように、必要な引数は1つだけですblockingMapped
。
私は得ています
とnote: 2 arguments expected, 1 provided
どこで私は間違えましたか?
編集
修正された作業バージョン(将来の「参照」用):
ヘッダ:
ソース:
c++ - C++11 の乱数と std::bind が予期しない方法で相互作用する
私はGCC 4.6.3を使用しており、次のコードで乱数を生成しようとしていました:
どちらの方法でも、5 つの乱数のシーケンスが生成されると予想していました。代わりに、これは私が実際に得るものです:
これは GCC のバグですか? それとも、std::bind に関係する微妙な問題ですか? もしそうなら、あなたは結果を理解できますか?
ありがとう。
c++ - std :: bindでこれを行う方法は?
(注: タグからすでに明らかなように、これは厳密に C ++ 03です。 はい、私は知っています、ラムダはこのすべての苦痛を取り除きます(そして新しい種類をもたらすでしょう)が、これは組み込みシステムです、 90年代のOSバージョンで、C ++ 03コンパイラ(GCC4.1.x、BTW)、またはC++コンパイラを持っていてよかったと言われています。C++11の投稿は控えてください。解決策。実際にこする必要はありません。
また、もちろん、なども実際には含まstd::bind()
れていますが、コードにノイズを追加するだけだと思ったので、プレフィックスを編集しました std::function()
std::tr1
tr1
。 )
関数を登録する必要があるサーバーのようなものがいくつかあり、オブジェクトの類似しているがわずかに異なる関数を呼び出すようにそれらを適応させる必要があります。これらの関数には異なる引数リストがあります。std::function
サーバーはそれを「認識」しており、関数を登録しようとすると、テンプレート引数として渡されたマジックタグに応じて、正しい署名(つまり、必要に応じて正しい)を持つ関数のみを受け入れます。
コードのスケッチは次のとおりです。
これは実際には機能しますが、実際にはもっと多くの機能があり、退屈なコピーアンドペーストの努力としてこれを行うと、私の尊厳感が損なわれ、臭いコードが生成されます。これらの関数はすべてまったく同じように機能しますが、唯一の違いは、呼び出す関数と、渡す引数または渡さない引数だけです。これらを1つのパラメーター化された関数に折りたたんで、違いを隠しておくことができますstd::bind()
。これに失敗したので、私は最初に(のように)パラメーターなしですべての関数に対してこれを行うことに決めましたfoo()
。これは圧倒的多数です。
foo()
そのため、 -like関数のすべての呼び出しを、面倒な部分をX
実行する単一の関数を介してルーティングしたいと思いました。Y::call_it
X
適切な関数を引数としてバインドします。
明らかに、これは間違っており、これを解決するための他のすべての試みも間違っています。(私は今10週間しか遊んでいstd::bind()
ないので、我慢してください)。std::function
結局、私は、成長した男を涙で倒すことができ、少なくとも1年間は縮小と彼の拡大家族を養うはずの、テンプレート化された内臓からの陽気なエラーメッセージの信じられないほどの迷路に迷いました。
それで、私が完全な欲求不満から自分自身を殺し、私の子供たちを孤児にする前に、どうすればこれを行うことができますか?
c++ - std::bind() 一時オブジェクトで明示的なキャストを避ける方法は?
std::bind の戻り値の型は (意図的に) 指定されていません。std::function に格納できます。
以下のサンプル プログラムは、fn1() を呼び出すために、std::bind() によって返された一時オブジェクトを std::function に明示的にキャストする方法を示しています。
std::bind の戻り値の型がわかっている場合、Callback コンストラクターをオーバーロードでき、std::bind 一時オブジェクトを明示的にキャストする必要がなくなります。
明示的なキャストを回避する方法はありますか?
おそらく関係ありませんが、Linux で gcc 4.7.2 を使用しています。