MFC中一个对象要和另一个对象发送消息,则需要用到MFC中那套DDK机制。
QT中实现了一套signal/slot机制,gtk中也实现了signal/slot机制。
不过,在阅读libjingle源码时,发现一个更为巧妙的实现,仅仅一个头文件就搞定了。(MFC用来大量的宏,QT搞了一个MOC东东)
源码如下:
http://sigslot.sourceforge.net/
示例代码如下:
#include <iostream>
#include "sigslot.h"
using namespace sigslot;
struct dog
{
signal1<std::string &> bark; // 狗叫,需要发送
void beaten()
{
std::string w = "汪汪汪";
bark(w); // 消息产生
}
};
struct human : public has_slots<>
{
// 响应狗叫,处理
void dog_bark(std::string &w)
{
std::cout << "听到狗叫: " << w.c_str() << std::endl;
}
};
int main()
{
dog d;
human man;
d.bark.connect(&man, &human::dog_bark); // 绑定
d.beaten();
d.bark.disconnect(&man);
return 0;
}
不过,http://sigslot.sourceforge.net/ 下载的源码编译出错,改用libjingle中的sigslot.h就不会有问题了。