2012-03-23 9 views
2

をしてください呼び出すの異なる署名、次のコードに誤りがない理由:のstd ::バインドと説明し、バインドさ機能

void f() 
{ 
} 

void h() 
{ 
    std::bind(f)(42); 
} 

コンパイラは、STDに冗長パラメータについて文句を言うしないのはなぜ::バインドながら、結合関数f?そして、もしそうでなければ、なぜこれが役に立つのかも説明してください。

+2

あなたはどのようなコンパイラを使用していますか?質問に答えようとしている人を知ることは有用かもしれません。 –

+0

それはありませんか? g ++は文句を言ってコンパイルしません... – ShinTakezou

答えて

2

このコードは準拠しています。 bindの結果に渡す引数は、必要に応じてのみ使用されます。標準の用語を使用して


ustd::bind(f, t1, ..., tN)の結果です。

話す:

u(u1, u2, ..., uM)が呼び出されると、fviの値は、以下のアルゴリズムによって決定されている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 
関連する問題