これは機能しません: http://ideone.com/mUL5Y
そのタイプを差し引くのに少し役立ったと思います: http://ideone.com/mGfUj
どちらも機能しません!なぜだかわかりません。
どうすればいいですか?
これは機能しません: http://ideone.com/mUL5Y
そのタイプを差し引くのに少し役立ったと思います: http://ideone.com/mGfUj
どちらも機能しません!なぜだかわかりません。
どうすればいいですか?
問題は、ここで 2 回目に渡すときに、(実際には型である) オブジェクトの評価結果std::bind
を内部的に渡していることです。Callable
std::bind<>
c
part2(std::bind(&Quux::part3<Callable>, this, 3, c))
std::bind
あなたが想定しているように、評価されていないバージョンのオブジェクトを渡しているわけではありません。
したがって、f
関数は型を返すため、void
式の結果c
は内部的にvoid
型として渡され、評価されていない呼び出し可能な関数オブジェクトではありません。したがって、 でCallable
オブジェクトc
を呼び出そうとすると、 で呼び出しをQuux::part2
評価しようとすると、 の 2 番目の引数として呼び出し可能なオブジェクトを渡すことができません。これは、渡す型が実際には型であり、呼び出し可能な型ではないためです。c
Quux::part3
Quux::part3
void
詳細については、こちらを参照してください: http://en.cppreference.com/w/cpp/utility/functional/bind
特に次の点に注意してください。
の最初の呼び出し
std::is_bind_expression<T>::value==true
で別の部分式が引数として使用された場合、その bind-subexpression がすぐに呼び出され、その結果が関数に渡されます。std::bind()
bind
サブ式を渡すときではなく、必要なときに評価が行われるように評価を遅らせたい場合は、ラムダ、オブジェクト、ファンクターstd::bind
などの別のメソッドを探す必要があります。std::function<>
呼び出し可能であり、後で評価できる状態を格納できるクラスオブジェクト型。