您的位置:首页 > 编程语言 > C语言/C++

sigslot学习

2018-01-30 14:58 148 查看
最近在学习 sigslot, Sigslot 是Sarah Thompson 设计实现的C++ 事件处理的框架,非常的轻量级,只有一个.h文件:sigslot.h, 最大限度的将事件和处理机制解耦, 并且保证了线程安全.

项目主页:http://sigslot.sourceforge.net/

GitHub: https://github.com/KubaO/sigslot

这里记录两个例子,作为对比,例子来源于官方的说明文档,稍作修改

// n1.cpp

#include <stdio.h>
#include <stdio.h>

class Switch
{
public:
virtual void Clicked() = 0;
};

class Light
{
public:
void ToggleState()
{
printf("--->%d\n", __LINE__);
}
void TurnOn();
void TurnOff();
};

class ToggleSwitch : public Switch
{
public:
ToggleSwitch(Light lp)
{
m_lp = lp;
}

virtual void Clicked()
{
m_lp.ToggleState();
}
private:
Light m_lp;
};

int main(int argc, char** argv)
{
Light lp1, lp2;
ToggleSwitch tsw1(lp1), tsw2(lp2);

tsw1.Clicked();
tsw2.Clicked();
}


在Linux下编译:# g++ n1.cpp -o app

运行:# ./app

—>17

—>17

// n2.cpp, 使用sigslot

#include <stdio.h>
#include <stdio.h>
#include "sigslot.h"

class Switch
{
public:
sigslot::signal0<> Clicked;
};

class Light : public sigslot::has_slots<>
{
public:
void ToggleState()
{
printf("--->%d\n", __LINE__);
}
void TurnOn();
void Turnoff();
};

int main(int argc, char** argv)
{
Switch sw1, sw2;
Light lp1, lp2;

sw1.Clicked.connect(&lp1, &Light::ToggleState);
sw2.Clicked.connect(&lp2, &Light::ToggleState);

sw1.Clicked();
sw2.Clicked();

}


编译:# g++ n2.cpp -o app

执行: #./app

—>16

—>16

发现使用sigslot后,类Light和类Switch实现了解耦合。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++语言