不知道,这段代码怎么回事,是关于仿函数的

C++语言 码拜 9年前 (2016-04-24) 935次浏览
大家好,能帮本人看下,下面的代码吗?想不通哪里出错了。先谢了啦。

#include <iostream>
#include <functional>
using namespace std;
class Node{
public:
    explicit Node(int i = 300){ cout << "Node Constructor has called!" << endl; }
private:
    int _i, _j, _k;
};
typedef function<void(Node&, long, long)> Action;
struct Command{
    Action action;
    UINT  msg;
};
class CommandEXE{
public:
    CommandEXE(long wParam, long lParam)
                            : _wParam(wParam)
                            , _lParam(lParam){
            cout << "CommandEXE called with wParam, lParam" << endl;
    }
private:
    long _wParam;
    long _lParam;
};
Action DerivedAction(CommandEXE cmdexe){
    return [=] (Node& node, long wParam, long lParam){
		cmdexe(node, wParam, lParam);
	};
}
int main(){
    Action a = DerivedAction(CommandEXE(40, 50));
    return 0;
}

然后,错误信息是这样的:D:\WinPro\LamdaTaste\main.cpp|82|error: no match for call to “(const CommandEXE) (Node&, long int&, long int&)”|

解决方案

40

眼拙没看到 operator() 的声明或定义,那么所谓仿函数是在哪里呢?

120

引用:

首先,很感谢你能够回复本人的问题。其次,本人最终只是调用CommandEXE的构造函数,并没有真正用上operator()。不知道,正确的写法应该是怎样的呢?

cmdexe(node, wParam, lParam);  这里调用的不是构造函数,你对象都已经构造好了,用的是opertor()


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明不知道,这段代码怎么回事,是关于仿函数的
喜欢 (0)
[1034331897@qq.com]
分享 (0)