我想在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