1

誰かがこのコードを説明してもらえますか?

struct Class {
    boost::function<void()> member;
};
Class c;

boost::function<boost::function<void()>()> foo = boost::bind(&Class::member, &c);
boost::function<void()> bar = boost::bind(&Class::member, &c);

なぜbarコンパイルの定義が行われ、その結果は何ですか?

編集:foo()期待どおりに動作し、 を呼び出しますc.member()が、bar()動作しません。

4

2 に答える 2

0

最初の呼び出しは、エクストラクタファンクタを「生成」するために使用されます。そのファンクターが呼び出されると、バインドされていたメンバーが返されます。

2番目の呼び出しは、渡されたファンクターのリターンタイプを非表示にするだけです(これは最初の例と同じです)。つまり、基本的に、呼び出しbarは何もしません。

于 2011-03-30T14:38:04.643 に答える
0

クラスがそのようなものである場合は、バインドする必要があります。

class Class { public: void member(); };

次に、やりたいことは次のとおりです。

Class c;

boost::function<void()> the_function_i_want_to_call = boost::bind(&Class::member, c);

the_function_i_want_to_call.call();

于 2011-03-24T13:00:14.370 に答える