boost庫在工作(15)繫結器與函式物件之三

2021-06-16 14:49:09 字數 844 閱讀 8623

前面已經可以優美地解決兩個引數的函式給演算法for_each呼叫了,但是又會遇到這樣的一種情況,當需要三個引數或者三個以上的引數給演算法for_each呼叫呢?從stl裡的繫結器bind1st,顯然是不行了,因為它最多隻支援兩個引數,那還有什麼辦法呢?這時就需要使用boost庫里強大的繫結器bind了。它不僅適用的情況比stl庫里的多,還更加方便,更加人性化。下面就來看看怎麼樣繫結三個引數的類成員函式的例子,如下://呼叫類的成員函式,但引數兩個以上。

class cobjbind

使用繫結器就可以寫成下面這樣:

//實現 if ( x > 10 && x <= 20)

boost::bind(  std::logical_and(), 

boost::bind(std::greater(),_1, 10), 

boost::bind(std::less_equal(),_1, 20))(15);

通過這樣的組合,就可以實現很複雜的表示式運算,這樣就可以給演算法提供更加複雜的條件,達到我們需要達到的目的。

如下面的例子,可以合適地刪除指定條件的元素:

vrect.erase(std::remove_if(vrect.begin(), vrect.end(),

boost::bind(&cobjbind::isless,this, _1)), vrect.end());

在這個例子裡,先呼叫演算法remove_if來刪除陣列中小於指定條件的元素,並返回無效元素的起始位置,然後呼叫vrect.erase刪除後面無效的元素,最終在陣列裡就剩下有效的元素了。

總之,繫結器已經成為boost庫里不可缺少的一部份了,比如演算法、執行緒、網路等庫中,都需要使用繫結器進行適配,以便達到高效、簡潔、方便等目的。

boost庫在工作(13)繫結器與函式物件之一

在stl模板庫里提供兩個繫結器 bind1st和bind2nd,這兩個繫結器只支援兩個引數,如果是兩個以上的引數,就無能為力了。下面先來看看這兩個繫結器的使用例子,如下 include stdafx.h include include include void fun int x,int y 使用b...

boost庫在工作(19)執行緒之四

從前面也看到使用鎖boost mutex時,如果不小心就會死鎖,這樣要費心費力去維護這樣的 在boost庫里提供同乙個函式遞迴呼叫時使用的鎖boost recursive mutex,當同乙個執行緒呼叫時,碰到相同已經上鎖的鎖時,還可以繼續往下執行。這時就不用擔心同乙個執行緒呼叫不同的函式時造成死鎖...

boost庫在工作(20)執行緒之五

通過上面的學習,基本上就可以使用執行緒了,但怎麼樣讓執行緒執行類裡的成員函式呢?以便封裝得更方便使用了。接著下來,就看這個例子,如下 include stdafx.h include include include 封裝執行緒組執行的類,並且演示使用類成員函式作為執行緒組執行函式 class cth...