0

このようなことを行う方法はありますか (MS VS 2008)?

boost::bind mybinder = boost::bind(/*something is binded here*/);
mybinder(/*parameters here*/); // <--- first call
mybinder(/*another parameters here*/); // <--- one more call

私は試した

int foo(int){return 0;}

boost::bind<int(*)(int)> a = boost::bind(f, _1);

しかし、うまくいきません。

4

2 に答える 2

3
int foo(int){return 0;}
boost::function<int(int)> a = boost::bind(f, _1);
于 2011-09-16T11:47:16.327 に答える
2

バインドは未指定の型を返すため、その型の変数を直接作成することはできません。boost::functionただし、任意の関数またはファンクター型に対して構築可能な型テンプレートがあります。そう:

boost::function<int(int)> a = boost::bind(f, _1);

トリックを行う必要があります。さらに、値をバインドせず、プレースホルダーのみをバインドする場合は、関数ポインターからも構築できるbindため、完全になくてもかまいません。functionそう:

boost::function<int(int)> a = &f;

ある限り動作するはずfですint f(int)。この型はstd::function、C++11 クロージャ (およびbindも受け入れられました)で使用されるように C++11 になりました。

std::function<int(int)> a = [](int i)->int { return f(i, 42); }

autoC++11 で直接呼び出す場合は、新しい使用法の方が簡単であることに注意してください。

auto a = [](int i)->int { return f(i, 42); }

しかし、それを渡したい場合は、std::functionそれでも便利です。

于 2011-09-16T11:47:53.547 に答える