C++用boost.signal實(shí)現(xiàn)多播委托
boost.signal提供了一個多播委托機(jī)制,通過它可以非常容易的實(shí)現(xiàn)觀察者模式:
void print_sum(float x, float y)
{
std::cout << "The sum is " << x+y << std::endl;
}
void print_product(float x, float y)
{
std::cout << "The product is " << x*y << std::endl;
}
void print_difference(float x, float y)
{
std::cout << "The difference is " << x-y << std::endl;
}
int main()
{
boost::signal<void (float, float)> sig;
sig.connect(print_sum);
sig.connect(print_product);
sig.connect(print_difference);
sig(5, 3);
}signal對象的使用方式非常簡單,connect連接回調(diào),disonnect去連接回調(diào),()運(yùn)算符執(zhí)行所有回調(diào)。
連接成員函數(shù)
通過lambda表達(dá)式也可以非常容易的實(shí)現(xiàn)成員函數(shù)的連接:
struct A
{
int value;
A(int value) : value(value) {}
void Foo() { cout << "a has value of " << value << endl; }
};
int main()
{
A a(123);
boost::signal<void ()> sig;
sig.connect([&]() {a.Foo();});
sig();
}連接帶返回值的函數(shù)
signal也支持帶返回值的函數(shù),和C#一樣,只返回最后一個函數(shù)的返回值。
boost::signal<int ()> sig;
sig.connect([](){ return 1; });
sig.connect([](){ return 2; });
sig.connect([](){ return 3; });
cout << sig() << endl;異常處理
signal的異常處理機(jī)制也和c#一樣:遇到異常后停止執(zhí)行,拋出異常。
sig.connect([](){ cout << "foo 1" << endl; });
sig.connect([](){ throw std::exception("foo 2 fail"); });
sig.connect([](){ cout << "foo 3" << endl; });
try
{
sig();
}
catch (std::exception& error)
{
cout << error.what() << endl;
}到此這篇關(guān)于C++用boost.signal實(shí)現(xiàn)多播委托的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++實(shí)現(xiàn)俄羅斯方塊(windows API)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)俄羅斯方塊,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
可能是全網(wǎng)最詳細(xì)的Qt連接MySQL數(shù)據(jù)庫教程
QT眾所周知是一個開源的,以C++為底層的可視化工具庫,下面這篇文章主要給大家介紹了關(guān)于最詳細(xì)的Qt連接MySQL數(shù)據(jù)庫教程的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
opengl實(shí)現(xiàn)任意兩點(diǎn)間畫圓柱體
這篇文章主要為大家詳細(xì)介紹了opengl實(shí)現(xiàn)任意兩點(diǎn)間畫圓柱體,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
深入理解數(shù)組指針與指針數(shù)組的區(qū)別
本篇文章是對數(shù)組指針與指針數(shù)組的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C++實(shí)現(xiàn)正整數(shù)的四則運(yùn)算表達(dá)式
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)正整數(shù)的四則運(yùn)算表達(dá)式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
C語言實(shí)現(xiàn)為無聲avi視頻添加wave音樂
這篇文章主要為大家詳細(xì)介紹了C語言如何實(shí)現(xiàn)為無聲avi視頻添加wave音樂,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下2023-11-11

