简介
在c++11中,可以通过std::bind将非静态成员函数绑定到function对象上,但是如何绑定到c中的函数指针上,可以借助function
实现
简单实现
typedef int (*ProcessCallbackT)(int, int);
void register_with_library(ProcessCallbackT func)
{int x = 0;int y = 1;printf("Value: %i\n", func(x, y));
}using ProcessCallback = std::function<int(int, int)>;
class FuncHelperClass
{static inline ProcessCallback function_obj;
public:static int FuncHelper(int a, int b){return function_obj(a, b);}static void FuncBind(ProcessCallback callback){function_obj = callback;}
};
模板
template <typename T>
struct Callback;//特例化
template <typename Ret, typename... Params>
struct Callback<Ret(Params...)>
{template <typename... Args>static Ret callback(Args... args) //对应静态成员函数{return func(args...);}static inline std::function<Ret(Params...)> func; //对应静态函数对象
};
参考:
https://www.cnblogs.com/dragonxyl/p/15620367.html