2
をしてください呼び出すの異なる署名、次のコードに誤りがない理由:のstd ::バインドと説明し、バインドさ機能
void f()
{
}
void h()
{
std::bind(f)(42);
}
コンパイラは、STDに冗長パラメータについて文句を言うしないのはなぜ::バインドながら、結合関数f?そして、もしそうでなければ、なぜこれが役に立つのかも説明してください。
をしてください呼び出すの異なる署名、次のコードに誤りがない理由:のstd ::バインドと説明し、バインドさ機能
void f()
{
}
void h()
{
std::bind(f)(42);
}
コンパイラは、STDに冗長パラメータについて文句を言うしないのはなぜ::バインドながら、結合関数f?そして、もしそうでなければ、なぜこれが役に立つのかも説明してください。
このコードは準拠しています。 bindの結果に渡す引数は、必要に応じてのみ使用されます。標準の用語を使用して
:u
はstd::bind(f, t1, ..., tN)
の結果です。
約話す:
をu(u1, u2, ..., uM)
が呼び出されると、f
はvi
の値は、以下のアルゴリズムによって決定されているf(v1, ..., vN)
、と呼ばれる:
//N is the N from `std::bind(f, t1, ..., tN)`
For each i in 1 to N:
if (ti is a reference wrapper) vi is the unwrapped version of t1
if (ti is a bind_expression) vi is the result of calling ti with u1, ..., uM
if (ti is a placeholder) vi is uj (where j is is_placeholder<decltype(ti)>::value)
otherwise vi is ti
あなたはどのようなコンパイラを使用していますか?質問に答えようとしている人を知ることは有用かもしれません。 –
それはありませんか? g ++は文句を言ってコンパイルしません... – ShinTakezou