简介
在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; //对应静态函数对象
};