相关疑难解决方法(0)

什么是C++仿函数及其用途?

我一直在听C++中的仿函数.有人可以给我一个关于它们是什么的概述以及在什么情况下它们会有用吗?

c++ functor function-object function-call-operator

822
推荐指数
8
解决办法
44万
查看次数

我可以使用lambda函数或std :: function对象代替函数指针吗?

我有一个我需要使用的库,它定义了以下内容:

typedef void CallbackFunction(const int& i);
Run Code Online (Sandbox Code Playgroud)

并具有注册回调的功能,如下所示:

void registerCallback(CallbackFunction* pCallback);
Run Code Online (Sandbox Code Playgroud)

因为我想捕获要在回调中使用的几个变量的状态,所以我不能简单地使用普通函数.我更喜欢使用的是lambda函数,但以下内容不能编译:

auto fCallback = [](const int& i) {
    cout << i << endl;
};
registerCallback(fCallback);
Run Code Online (Sandbox Code Playgroud)

相反,我得到错误:

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
Run Code Online (Sandbox Code Playgroud)

我一直在阅读这个主题很多,并尝试了一些不同的(可能是愚蠢的)方法,但我似乎无法让这个工作.转换函数允许代码编译,但(毫不奇怪)它崩溃了.可能是我在StackOverflow或其他地方忽略了解决方案,所以链接就足够了.(虽然,因为我对这些技术有点新,所以请确保新手的通信清晰.例如,如果这个对话包含我的答案,我不明白.请简化或解释对应.)仅供参考,我正在使用Visual C++ 2010.

如果我能做些什么来澄清我的问题,请告诉我.在此先感谢您的帮助!

c++ lambda function-pointers callback

12
推荐指数
2
解决办法
5728
查看次数