24.函数信号机制(本质上就是函数指针)

  1 #define _CRT_SECURE_NO_WARNINGS
  2 #include <iostream>
  3 #include <boost/bind.hpp>
  4 #include <boost/function.hpp>
  5 #include <boost/signals2.hpp>//信号
  6 #include <cstdlib>
  7 
  8 using namespace std;
  9 using namespace boost;
 10 
 11 //信号模拟
 12 class button
 13 {
 14 public:
 15     void connect(void(*f)(int, int));
 16     void Onclick();
 17 private:
 18     void(*pfun)(int, int);
 19 };
 20 
 21 void button::Onclick()
 22 {
 23     this->pfun(10, 20);
 24 }
 25 
 26 void button::connect(void(*f)(int, int))
 27 {
 28     //初始化函数指针
 29     this->pfun = f;
 30 }
 31 
 32 void run(int x, int y)
 33 {
 34     cout << x << y << endl;
 35 }
 36 
 37 void main1()
 38 {
 39     button b1;
 40     b1.connect(run);
 41     while (1)
 42     {
 43         system("pause");
 44         b1.Onclick();
 45     }
 46     cin.get();
 47 }
 48 
 49 
 50 class Button
 51 {
 52     //简化定义
 53 private:
 54     //函数
 55     typedef signals2::signal<void(int, int)> Onclick;
 56     //链接
 57     typedef signals2::signal<void(int, int)>::slot_type OnSlottype;
 58 
 59 public:
 60     //链接
 61     signals2::connection connect(const OnSlottype &type);
 62     //解除链接
 63     void disconnect0(const signals2::connection &type);
 64     //按钮按下
 65     void OnBnclick();
 66 
 67 public:
 68     signals2::connection connect_;//代表链接
 69     Onclick onclick_;//代表链接的函数
 70 };
 71 
 72 //绑定到onclick_
 73 signals2::connection Button::connect(const OnSlottype &type)
 74 {
 75     return connect_ = onclick_.connect(type);//链接
 76 }
 77 
 78 //解除链接
 79 void Button::disconnect0(const signals2::connection &type)
 80 {
 81     //关闭一个链接
 82     onclick_.disconnect(connect_);
 83     //关闭所有的链接
 84     //onclick_.disconnect_all_slots();
 85 }
 86 
 87 //按钮按下
 88 void Button::OnBnclick()
 89 {
 90     onclick_(10, 20);
 91 }
 92 
 93 
 94 void main()
 95 {
 96     Button btn;
 97     btn.connect(&run);
 98     while (1)
 99     {
100         system("pause");
101         btn.OnBnclick();
102         btn.disconnect0(btn.connect_);
103     }
104     cin.get();
105 }

 

posted @ 2018-04-02 10:25  喵小喵~  阅读(202)  评论(0编辑  收藏  举报