を呼び出し、これは動作しません: http://ideone.com/mGfUjバインドと周りのテンプレート関数を渡すが
どちらか動作しません:私はそれがその型を控除して少しは助け考え出し http://ideone.com/mUL5Y
を!なぜ私は理解していない。
どうすればよいですか?
part2(std::bind(&Quux::part3<Callable>, this, 3, c))
それはないです。
を呼び出し、これは動作しません: http://ideone.com/mGfUjバインドと周りのテンプレート関数を渡すが
どちらか動作しません:私はそれがその型を控除して少しは助け考え出し http://ideone.com/mUL5Y
を!なぜ私は理解していない。
どうすればよいですか?
part2(std::bind(&Quux::part3<Callable>, this, 3, c))
それはないです。
問題はstd::bind
が内部Callable
のは、あなたがここに二度目のためにそれを渡すときにオブジェクトc
(それが実際にstd::bind<>
タイプです)に評価結果を渡していることのようですあなたが仮定しているように、std::bind
オブジェクトの評価されていないバージョンを渡します。あなたのf
関数がvoid
型を返すので、
したがって、c
式の結果は内部void
タイプではなく、未評価した呼び出し可能な関数オブジェクトとして渡されます。したがって、あなたはそれを渡しているタイプは、実際にvoid
タイプであるためにターンQuux::part3
でコールc
を評価しようとしている、それは、Quux::part3
に2番目の引数として呼び出し可能なオブジェクトを渡すことはできません、Quux::part2
にCallable
オブジェクトc
を呼び出そうとするとき、呼び出し可能な型ではありません。さらに参考のために
、こちらを参照してください。特にそのhttp://en.cppreference.com/w/cpp/utility/functional/bind
注:
std::is_bind_expression<T>::value==true
場合(つまり、別のstd::bind()
部分式がbind
への最初の呼び出しの引数として使用された)、そのバインドを-subexpressionがすぐに呼び出され、の結果が関数に渡されます。
あなたはあなたがそれをしたい時に起こる、とあなたはstd::bind
サブ式を渡したときに、あなたがそのようなラムダ、またはstd::function<>
として、別の方法を探す必要がありますないような評価を遅らせたい場合オブジェクト、ファンクタ、または呼び出し可能であり、後で評価できる状態を格納することができる他のクラスオブジェクト型である。
どのように評価することができますか? cはどこにも呼び出されません...なぜそれはvoid()からvoidに変わりますか? – Nick
'std :: bind'を別の' std :: bind'に渡すと、最初の部分式が評価され、* results *が2番目の 'std :: bind'に渡されます。 'void(*)(int)'を評価すると、呼び出し可能な 'void(*)(int) 'ではなく' void'型になります。あなたは明示的に 'c'を呼び出すわけではありませんが、呼び出し可能なオブジェクト自体ではなく、呼び出しが渡された結果、ネストされた' std :: bind'式のために実際に裏で呼び出されています。 – Jason
ところで、クラスメソッドではなく通常の自立型関数を使用すると、この変換がどこでどのように行われるかをよりよく理解できます。[関連するエラーメッセージの例があります](http://ideone.com/CCQot) – Jason
コードをポストにコピーできませんでしたか?私たちは、24行のコードのオフサイトのソースを見ていますか? –
@NicolBolasはい。あなたはエラーを受け取り、それをクローンすることができます。それを使って周りのプレイヤーは... irc://chat.freenode.net/##c++で適切なネチケットと見なされ、ここでも便利でした。 – Nick