我不得不被称为C语言函数:如何从lambda表达式获取函数指针?
f_api(void(*callback)(int))
,我有回调类的静态方法:
struct A {
static void CallBack(int i) {
A::count = i;
}
static count = 0;
};
我可以调用该函数是这样的:
f_api(&A::CallBack)
但是,我必须现在将回调更改为非静态,因为我必须创建多个A
对象。
但我不能改变f_api()
的定义。
我试图用一个lambda:
f_api([this](int i)->void{this->count = i;})`
但这个失败了,因为我不能转换拉姆达与捕捉到一个简单的函数指针。
std::bind()
也不能做的工作,因为f_api()
的定义。
我能为此做些什么?我如何从lambda表达式获取函数指针?有什么方法可以避开吗?
你已经排除了lambda作为一个解决方案,那么你为什么又问了一遍?无论如何,API是否允许您将用户定义的值传递给回调函数?如果是这样,那就用它来传递你的'this'指针。否则,你是SOL而不诉诸使用低级thunk。 –
没有什么可以做的。没有用于从成员函数指针形成常规函数指针的标准工具。如果您无法更改回调API,您将别无选择,只能通过常规功能以某种方式路由回调。 – AnT
@SilvioMayolo这有点不同..我发布了一个可能会帮助别人的解决方案,尽管它对我没有任何用处。 –