1. 程式人生 > >介紹一個型別安全的回撥庫:libsigc++

介紹一個型別安全的回撥庫:libsigc++

類似於QT的訊號與槽,可以一對一的繫結,也可以一對多多的繫結,很方便:
最初是在GTKMM官網發現的,使用c++語言,windows下也可以使用。
http://www.gtkmm.org/en/download.html

下面放出2個例子
例一:繫結成員函式

#include <iostream>
#include <sigc++/sigc++.h>

class Cat
{
public:
    void cry(int i){ std::cout << "cat:" << i << std::endl; }
};

class
Dog { public: void say(int i){ std::cout <<"dog:"<< i << std::endl; } }; int main() { Cat cat3; sigc::signal<void, int>mySignal3; mySignal3.connect(sigc::mem_fun(cat3, &Cat::cry)); mySignal3.connect(sigc::mem_fun(Dog(), &Dog::say)); mySignal3.emit(001
); //向dog和cat傳送訊號。 return 0; }

例二:繫結普通函式

#include <iostream>
#include <string>

#include <sigc++/sigc++.h>

void speak(const std::string& str)
{
    std::cout << str;
}

int main()
{
    sigc::signal<void, const std::string&> mySignal;

    mySignal.connect(sigc::ptr_fun(&speak));

    mySignal.emit("hello world\n"
); return 0; }