【发布时间】:2014-02-11 20:23:41
【问题描述】:
如何通过函数将成员函数指针传递给std::function。我将通过比较来解释它(Live Test):
template<class R, class... FArgs, class... Args>
void easy_bind(std::function<R(FArgs...)> f, Args&&... args){
}
int main() {
fx::easy_bind(&Class::test_function, new Class);
return 0;
}
我收到一条错误消息:
no matching function for call to ‘easy_bind(void (Class::*)(int, float, std::string), Class*)’
我只是不明白为什么函数指针在通过函数参数传递时不能传递给std::function。我怎样才能通过该功能?我愿意将easy_bind函数参数从std::function改成函数指针,但我真的不知道怎么做。
编辑:问题简化。
编辑:感谢@remyabel,我能够得到我需要的东西:http://ideone.com/FtkVBg
template <typename R, typename T, typename... FArgs, typename... Args>
auto easy_bind(R (T::*mf)(FArgs...), Args&&... args)
-> decltype(fx::easy_bind(std::function<R(T*,FArgs...)>(mf), args...)) {
return fx::easy_bind(std::function<R(T*,FArgs...)>(mf), args...);
}
【问题讨论】:
-
我正在研究一种解决方法,所以我的答案目前不完整。 Generic functor for functions with any argument list 似乎是一个不错的候选者,但这并没有考虑到成员函数指针。
-
您希望
R、FArgs和Args有哪些类型? -
我得到了这个
easy_bind使用全局函数:ideone.com/FtkVBg。但是成员函数仍然无法工作:( -
@BenVoigt
R(FArgs...)是一个函数,在我的例子中是&Class::test_function的类型;Args是new Class的类型 -
@Gasim 我编辑了我的答案,但是我很努力,无法弄清楚如何消除将无用对象传递给函数调用的需要。也许有人可以看看。编辑:从头开始,它按预期工作。
标签: c++ c++11 parameter-passing function-pointers