問題タブ [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 投票する
2 に答える
264 参照

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

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

c++ - std::bind内の別の関数への引数として関数ポインタを渡す

渡された関数をtry-catch句内にラップしようとしています。これにより、スローされた例外をキャッチし、再スローする前にクリーンアップを実行できます。コンパイルのバグを再現するサンプルコードを作成しました。

ラムダ式またはバインド呼び出しのいずれかに関数ポインターを渡す方法がわからないようです。bound()の呼び出しでエラーが報告されているようです。誰かがアドバイスをしたり、私が誤解していることがあるかどうか教えてもらえますか?

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

c++ - std::bind とオーバーロードされた関数

次のコード スニペットを参照してください。std::bindfor overloaded functionを使用したいfoobar。引数なしでメソッドのみを呼び出します。

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

c++ - bind から返されたオブジェクトが余分な引数を無視するのはなぜですか?

2 つの引数を取る関数があるとします。

そのうちの1つをバインドしたいと思います。std::bind次のように使用できます。

partiallyBoundFは引数を 1 つしか取りませんが、複数で呼び出すことができます。最初の引数を超える引数は、意味のある型である必要さえありません。

bindから返されたオブジェクトに追加の引数を渡すことを許可する目的は何ですか? 他の場所では拒否される呼び出しエラーをコンパイルできます。

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

c++ - std::bind と std::shared_ptr の使用を組み合わせる方法

このようなことを頻繁に行う必要があります。

(関数オブジェクトとも呼ばれます) をAsyncOperation実装する任意のカスタム クラスです。operator()

の代わりにstd::bindを使用することを に示すことは可能ですか? これにより、 で参照を保持する必要なく、メモリ リークが防止され、スレッドの最後で自動的にが削除されます。つまり、この非同期タスクの最後です。std::shared_ptrstd::refpAsyncOperationAsyncOperation

編集:私は常にstd::threadにアクセスできるとは限りません.スレッドライブラリはboost::threadまたはその他のプラットフォーム依存スレッドである可能性があります. 結果として、std::async にはアクセスできません。

私の主な問題は、std::bind で所有権の概念を持つことです。

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

c++ - __stdcall関数でstd::bindを使用する

__stdcall関数でstd::bind(boost :: bindではない)をどのように使用できますか、それとも現在の実装でも可能ですか?次の例をコンパイルしようとすると:

または同じですが、funcを次のように宣言します。

奇妙なビルド出力が表示されます(以下に含めました)。それをコンパイルさせるための非常に厄介な方法があります:

ただし、このような関数(* proc)(0,0,0);を呼び出すことはできません。それは悲しいことです。これはすべて、そのfunc(myhook)が__stdcallとして宣言されているために発生します。オフコース私はfuncの終わりに4つのdwordをプッシュするダーティアセンブリハックを書くことができ、これはそれを__stdcallにしますが、これについてはよくわかりません。また、これはさらに厄介な方法です。

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

c++ - std :: bind、thisおよびQtConcurrent

で使用されているメソッドstd::bindにバインドするために使用しようとしていますthisQtConcurrent::blockingMapped

ヘッダ:

}

ソース:

したがって、ここでImが行っているのはblockingMapped、のそれぞれConfigNodeで同時にステップを実行することcurrentConfigsです。std::bindにバインドthisするために使用してstepいるので、のドキュメントのように、必要な引数は1つだけですblockingMapped

私は得ています

note: 2 arguments expected, 1 provided

どこで私は間違えましたか?

編集

修正された作業バージョン(将来の「参照」用):

ヘッダ:

ソース:

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

c++ - C++11 の乱数と std::bind が予期しない方法で相互作用する

私はGCC 4.6.3を使用しており、次のコードで乱数を生成しようとしていました:

どちらの方法でも、5 つの乱数のシーケンスが生成されると予想していました。代わりに、これは私が実際に得るものです:

これは GCC のバグですか? それとも、std::bind に関係する微妙な問題ですか? もしそうなら、あなたは結果を理解できますか?

ありがとう。

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

c++ - std :: bindでこれを行う方法は?

注: タグからすでに明らかなように、これは厳密に C ++ 03です。 はい、私は知っています、ラムダはこのすべての苦痛を取り除きます(そして新しい種類をもたらすでしょう)が、これは組み込みシステムです、 90年代のOSバージョンで、C ++ 03コンパイラ(GCC4.1.x、BTW)、またはC++コンパイラを持っていてよかったと言われています。C++11の投稿は控えてください。解決策。実際にこする必要はありません。
また、もちろん、なども実際には含まstd::bind()れていますが、コードにノイズを追加するだけだと思ったので、プレフィックスを編集しました std::function()std::tr1tr1
。 )

関数を登録する必要があるサーバーのようなものがいくつかあり、オブジェクトの類似しているがわずかに異なる関数を呼び出すようにそれらを適応させる必要があります。これらの関数には異なる引数リストがあります。std::functionサーバーはそれを「認識」しており、関数を登録しようとすると、テンプレート引数として渡されたマジックタグに応じて、正しい署名(つまり、必要に応じて正しい)を持つ関数のみを受け入れます。

コードのスケッチは次のとおりです

これは実際には機能しますが、実際にはもっと多くの機能があり、退屈なコピーアンドペーストの努力としてこれを行うと、私の尊厳感が損なわれ、臭いコードが生成されます。これらの関数はすべてまったく同じように機能しますが、唯一の違いは、呼び出す関数と、渡す引数または渡さない引数だけです。これらを1つのパラメーター化された関数に折りたたんで、違いを隠しておくことができますstd::bind()。これに失敗したので、私は最初に(のように)パラメーターなしですべての関数に対してこれを行うことに決めましたfoo()。これは圧倒的多数です。

foo()そのため、 -like関数のすべての呼び出しを、面倒な部分をX実行する単一の関数を介してルーティングしたいと思いました。Y::call_it

X適切な関数を引数としてバインドします。

明らかに、これは間違っており、これを解決するための他のすべての試みも間違っています。(私は今10週間しか遊んでいstd::bind()ないので、我慢してください)。std::function結局、私は、成長した男を涙で倒すことができ、少なくとも1年間は縮小と彼の拡大家族を養うはずの、テンプレート化された内臓からの陽気なエラーメッセージの信じられないほどの迷路に迷いました。

それで、私が完全な欲求不満から自分自身を殺し、私の子供たちを孤児にする前に、どうすればこれを行うことができますか?

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

c++ - std::bind() 一時オブジェクトで明示的なキャストを避ける方法は?

std::bind の戻り値の型は (意図的に) 指定されていません。std::function に格納できます。

以下のサンプル プログラムは、fn1() を呼び出すために、std::bind() によって返された一時オブジェクトを std::function に明示的にキャストする方法を示しています。

std::bind の戻り値の型がわかっている場合、Callback コンストラクターをオーバーロードでき、std::bind 一時オブジェクトを明示的にキャストする必要がなくなります。

明示的なキャストを回避する方法はありますか?

おそらく関係ありませんが、Linux で gcc 4.7.2 を使用しています。