我想在C++中实现中介模式。 我试图将成员函数地址传递给另一个类的中介函数(SignOn),该函数将这些回调函数保留在向量中,以便可以在所有同事对象上调用它们。将成员函数地址传递给另一个类的函数
但我得到以下错误: “*错误C2664: 'MediatorPattern ::中保::点登录':无法从“无效转换参数1(__thiscall MediatorPattern ::同事:: *)(的std :: string & )''到'MediatorPattern :: Mediator :: CallBack &'*“
我的问题是需要维护一个所有在'Mediator'对象上签名的同事对象的列表吗? 请帮我了解我错在哪里。
下面是代码:
namespace MediatorPattern
{
class Mediator;
class Colleague
{
string _name;
int _id;
Mediator* p_myMediator;
string _msg;
public:
Colleague(Mediator *pMediator, string s, int id):_name(s), _id(id)
{
p_myMediator = pMediator;
_msg = "Hi ! I am " + _name;
}
void MyCallBack(string& msg_in /*message part from mediator*/)
{
cout<< _msg << msg_in<< endl;
}
void SubscribeBroadcast();
};
class Mediator
{
typedef void (Colleague::*CallBack)(const string& s);
std::vector<CallBack> vecRecieverCallBack;
//typedef std::vector<CallBack>::iterator VecIterator;
public:
void SignOn(CallBack& callBack_in)
{
vecRecieverCallBack.push_back(callBack_in);
}
/*void Send(const string& s_in)
{
VecIterator it_begin = vecRecieverCallBack.begin();
VecIterator it_end = vecRecieverCallBack.end();
for(; it_begin != it_end; ++it_begin)
{
(*it_begin)(s_in);
}
}*/
};
void Colleague::SubscribeBroadcast()
{
p_myMediator->SignOn(&Colleague::MyCallBack);
}
}
谢谢,这解决了这个问题。 – Anitesh
@Anitesh:不客气:) – LihO