有没有办法做这样的事情(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);
但它不起作用。
答案 0 :(得分:3)
int foo(int){return 0;}
boost::function<int(int)> a = boost::bind(f, _1);
答案 1 :(得分:2)
bind返回未指定的类型,因此您无法直接创建该类型的变量。但是,有一个类型模板boost::function
可以构造为任何函数或函数类型。所以:
boost::function<int(int)> a = boost::bind(f, _1);
应该做的伎俩。另外,如果你没有绑定任何值,只有占位符,你可以完全没有bind
,因为function
也可以从函数指针构造。所以:
boost::function<int(int)> a = &f;
只要f
为int f(int)
,就应该有效。该类型使用C ++ 11作为std::function
与C ++ 11闭包(和bind
一起使用,也被接受):
std::function<int(int)> a = [](int i)->int { return f(i, 42); }
请注意,要在C ++ 11中直接调用它,auto
的新用法会更容易:
auto a = [](int i)->int { return f(i, 42); }
但是如果你想传递它,std::function
仍然派上用场。