【发布时间】:2014-02-20 19:47:05
【问题描述】:
我正在尝试在 C++ 中实现中介者模式。 我正在尝试将成员函数地址传递给另一个类的(Mediator)函数(SignOn),该函数将这些回调函数保存在一个向量中,以便可以在所有同事对象上调用它们。
但我收到以下错误: "*error C2664: 'MediatorPattern::Mediator::SignOn' : 无法将参数 1 从 'void (__thiscall MediatorPattern::Colleague::* )(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);
}
}
【问题讨论】:
标签: c++ pointers design-patterns function-pointers argument-passing