これは機能しません: http://ideone.com/mUL5Y
そのタイプを差し引くのに少し役立ったと思います: http://ideone.com/mGfUj
どちらも機能しません!なぜだかわかりません。
どうすればいいですか?
これは機能しません: http://ideone.com/mUL5Y
そのタイプを差し引くのに少し役立ったと思います: http://ideone.com/mGfUj
どちらも機能しません!なぜだかわかりません。
どうすればいいですか?
問題は、ここで 2 回目に渡すときに、(実際には型である) オブジェクトの評価結果std::bindを内部的に渡していることです。Callablestd::bind<>c
part2(std::bind(&Quux::part3<Callable>, this, 3, c))
std::bindあなたが想定しているように、評価されていないバージョンのオブジェクトを渡しているわけではありません。
したがって、f関数は型を返すため、void式の結果cは内部的にvoid型として渡され、評価されていない呼び出し可能な関数オブジェクトではありません。したがって、 でCallableオブジェクトcを呼び出そうとすると、 で呼び出しをQuux::part2評価しようとすると、 の 2 番目の引数として呼び出し可能なオブジェクトを渡すことができません。これは、渡す型が実際には型であり、呼び出し可能な型ではないためです。cQuux::part3Quux::part3void
詳細については、こちらを参照してください: 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<>呼び出し可能であり、後で評価できる状態を格納できるクラスオブジェクト型。