std C++ slot signal机制
来源:互联网 发布:投稿系统php源码 编辑:程序博客网 时间:2024/06/07 15:05
- #include <iostream>
- #include <vector>
- #include <functional>
- #include <algorithm>
- using namespace std;
- class A{
- public:
- void Clicked(int id)
- {
- cout << "A::Clicked" << endl;
- }
- };
- class B{
- public:
- void Clicked(int id)
- {
- cout << "B::Clicked" << endl;
- }
- };
- class SlotBase{
- public:
- virtual void OnSignal(int id) = 0;
- };
- template<class T>
- class Slot : public SlotBase{
- public:
- typedef void (T::*MemberFuncType)(int);
- Slot(T* obj, MemberFuncType func)
- :obj_(obj), func_(func)
- {
- }
- virtual void OnSignal(int id)
- {
- (obj_->*func_)(id);
- }
- private:
- T* obj_;
- MemberFuncType func_;
- };
- template<class T>
- SlotBase* MakeSlot(T * p, void (T::*func)(int))
- {
- return new Slot<T>( p, func ) ;
- }
- class Signal
- {
- public:
- virtual ~Signal()
- {
- std::for_each(slots_.begin(), slots_.end(), SignalDelete());
- }
- struct SignalDelete: public unary_function<SlotBase*, void>
- {
- public:
- void operator()(SlotBase*& slot) const
- {
- delete slot;
- }
- };
- struct SignalAction: public binary_function<SlotBase*, int, void>
- {
- public:
- void operator()(SlotBase*& slot, const int& i) const
- {
- slot->OnSignal(i);
- }
- };
- void signal(int id)
- {
- std::for_each(slots_.begin(), slots_.end(), bind2nd(SignalAction(), id));
- }
- void connect( SlotBase* s)
- {
- slots_.push_back(s);
- }
- protected:
- vector< SlotBase* > slots_;
- };
- int _tmain(int argc, _TCHAR* argv[])
- {
- A a;
- B b;
- Signal signal;
- signal.connect(MakeSlot(&a, &A::Clicked));
- signal.connect(MakeSlot(&b, &B::Clicked));
- signal.signal(1);
- return 0;
- }
转载地址:http://blog.csdn.net/hhyttppd/article/details/4192668
0 0
- std C++ slot signal机制
- std C++ slot signal机制
- C++ slot signal机制
- Qt signal slot 实现机制
- QT Signal/Slot机制介绍
- Qt中的Signal和Slot机制
- Qt的Signal和Slot机制(一)
- Qt的Signal和Slot机制(二)
- qt信号signal和槽slot机制
- Java实现Qt的SIGNAL-SLOT机制
- 对象间通信Signal和Slot机制
- qt信号signal和槽slot机制
- qt信号signal和槽slot机制
- Qt的Signal和Slot机制(一)
- Qt的signal/slot机制原理
- qt信号signal和槽slot机制
- 信号和槽机制(Signal & Slot)
- qt信号signal和槽slot机制
- 二叉树的最大节点
- iOS 多环境配置六张图就够了
- c++位运算符 | & ^ ~ && ||,补码,反码
- Android studio 开源日志输入库 Logger无法打印
- windows下静态库使用, 动态库的静态加载, 动态库的动态加载 原创实例!
- std C++ slot signal机制
- lintcode 把排序数组转换为高度最小的二叉搜索树
- 判断字符串String是否为空问题
- C# 多线程 AutoResetEvent和ManualResetEvent
- JS实现继承的几种方式
- 微服务架构的基础框架选择:Spring Cloud还是Dubbo?
- 机器学习(周志华版) 第一章习题1.1个人解答
- 第二册第三单元总结
- 下载html 转pdf