如何从成员函数创建函子?
我希望 run
调用 c.drive()
:
#include <functional>
using namespace std;
struct Car {
void drive() { }
};
template <typename Function>
void run(Function f) {
f();
}
int main() {
Car c;
run(bind1st(mem_fun(&Car::drive), &c));
return 0;
}
这不会编译,并且错误消息对我没有帮助:
at f():
与调用 '(std::binder1st
在调用 run 时 :
“class std::mem_fun_t
“class std::mem_fun_t
请不要提升。
更新:即使问题解决了,我也会很高兴看到 TR1/C++0x 解决方案!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Boost/TR1/C++0x 解决方案非常简单:
The Boost/TR1/C++0x solution is quite straightforward:
bind1st
从二元函数和值中生成一元函数。您正在尝试创建一个不从一元函数中获取任何参数的函数,并且标准 C++03 中没有任何内容支持这一点。你将不得不做这样的事情。
bind1st
makes a unary function out of a binary function and a value. You are trying to make a function that takes no parameters out of a unary function and there isn't anything to support this in standard C++03.You will have to do something like this.
使用 lambda 的 C++0x 解决方案 - http://www.ideone.com/jz5B1 :
The C++0x solution using lambdas - http://www.ideone.com/jz5B1 :