我试图写在c
库接口,使用这个熟悉的模式:如何将std :: function对象传递给函数指针的函数?
void some_c_handler(void(*func)(void*), void* data);
现在,我想写一个C++
包装这个功能看起来像这样:
void my_new_cpp_handler(std::function<void()>&& func)
{
void (*p)() = foo(func);
void* data = bar(func);
some_c_handler(p, data);
}
some_c_handler
和my_new_cpp_handler
都解决了同样的问题;他们正在接受某种功能以及某种状态。但后者是首选,因为它从用户中抽象出大部分实现细节,并允许简单地传入一个lambda对象。
因此my_new_cpp_handler
应该参照func
参数,将其转换为函数指针并将其状态转换为data
。
我对标准知之甚少,或者执行std::function
知道这是否是一个合理的要求。 foo
和bar
是否存在?
换句话说,我想要的是能够将有状态函数传递给c
回调处理程序,而无需手动实例化我自己的struct
类型以传递它。显然std::function
已经为我们做了这个,所以我很想能够以某种方式将函数指针从状态中分离出来,并将它传递到c
样式处理程序。这可能吗?