介紹一個型別安全的回撥庫:libsigc++
阿新 • • 發佈:2019-02-14
類似於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;
}