vs2015下面代碼編譯不過.
#include <memory>
#include <iostream>
#include <functional>
using namespace std;
struct stu{
int a{1};
int b{2};
};
typedef shared_ptr<stu> stuMsg
class test{
public:
void Minus(stuMsg& msg)
{
int res = msg.b - msg.a;
}
};
class msgSet{
public:
void setMsg(int num,std::function<stuMsg& msg>& parMsg)
{
_mapMsg.insert(std::pair<int,std::function<stuMsg& msg>&>(num,parMsg));
}
void callMsg(int num,stuMsg& msg)
{
std::map<int,std::function<stuMsg& msg>&>::iterator it= _mapMsg.find(num);
if(it != _mapMsg.end())
{
it->second(msg);
}
}
private:
std::map<int,std::function<stuMsg& msg>&> _mapMsg;
};
int main()
{
test testObj;
msgSet msgSetObj;
msgSetObj.setMsg(0,std::bind(&test::Minus, &testObj, std::placeholders::_1));
stuMsg stuMsgData = make_shared<stuMsg>();
msgSetObj.callMsg(0,stuMsgData);
}
uj5u.com熱心網友回復:
using namespace std;
struct stu {
int a{ 1 };
int b{ 2 };
};
typedef std::shared_ptr<stu> stuMsg;
class test {
public:
void Minus(stuMsg& msg)
{
int res = msg->b - msg->a;
}
};
class msgSet {
using fun_type = void(stuMsg&);
public:
void setMsg(int num, std::function<fun_type> parMsg)
{
_mapMsg.insert(std::make_pair(num, parMsg));
}
void callMsg(int num, stuMsg& msg)
{
auto iter = _mapMsg.find(num);
if (_mapMsg.end() != iter && nullptr != iter->second)
{
iter->second(msg);
}
}
private:
std::map<int, std::function<fun_type>> _mapMsg;
};
int main()
{
test testObj;
msgSet msgSetObj;
msgSetObj.setMsg(0, std::bind(&test::Minus, &testObj, std::placeholders::_1));
stuMsg stuMsgData = std::make_shared<stu>();
msgSetObj.callMsg(0, stuMsgData);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/207398.html
標籤:C++ 語言
上一篇:C語言中變數何時分配空間?
下一篇:求解
