gpt4 book ai didi

c++ - 如何将成员函数指针传递给 std::function

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:56:42 24 4
gpt4 key购买 nike

如何通过函数将成员函数指针传递给 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...);
}

最佳答案

http://en.cppreference.com/w/cpp/utility/functional/mem_fn是你应该使用的

struct Mem
{
void MemFn() {}
};

std::function<void(Mem*)> m = std::mem_fn(&Mem::MemFn);

关于c++ - 如何将成员函数指针传递给 std::function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21271728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com