我有一个需要使用的库,它定义了以下内容:
typedef void CallbackFunction(const int& i);
并且有一个注册回调函数的函数,它看起来像:
void registerCallback(CallbackFunction* pCallback);
因为我想要捕获多个变量的状态以便在回调函数中使用,所以我不能简单地使用普通函数。我更喜欢使用lambda函数,但以下代码无法编译:
auto fCallback = [](const int& i) {
cout << i << endl;
};
registerCallback(fCallback);
但我得到了以下错误:
error C2664: 'registerCallback' : cannot convert parameter 1 from '`anonymous-namespace'::<lambda0>' to 'CallbackFunction (__cdecl *)'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
我已经花了很多时间研究这个话题,尝试了一些不同的方法(可能很蠢),但似乎无法使其工作。将函数进行强制类型转换可以编译代码,但(毫不奇怪)它会崩溃。也许我在StackOverflow或其他地方忽略了解决方案,所以一个链接就足够了。(不过,因为我对某些技术还是有点新手,所以请确保对新手足够清晰。例如,如果此对话包含我的答案,我并不理解。请简化或解释相应内容。)顺便说一下,我正在使用Visual C++ 2010。
如果有什么需要澄清的,请让我知道。感谢提前帮助!