BOOST 函式物件

2021-09-19 09:24:21 字數 1013 閱讀 6899

可用於替換來自c++標準的std::bind1st()、std::bind2nd()函式

boost.ref通常和boost.bind一起使用。

提供:boost::ref()和boost::cref()

由於boost::bind()會複製它的引數,因此當要用於boost::bind()的函式帶有至少乙個引用引數時,引用必須特別處理。(用boost::ref)

使std::cout流可以被以引用方式傳遞:

boost::bind(funcptr, _1, _2, boost::ref())

以引用方式傳遞常量物件,可以用模板函式boost::cref()

用於封裝函式指標

匿名函式

定義於:boost\lambda\lambda.hpp

標頭檔案 boost/lambda/if.hpp 定義了幾個結構,允許在 lambda 函式內部使用 if 語句。 最基本的結構是 boost::lambda::if_then() 模板函式,它要求兩個引數:第乙個引數對條件求值 - 如果為真,則執行第二個引數。 如例中所示,每個引數本身都可以是 lambda 函式。

除了 boost::lambda::if_then(), boost.lambda 還提供了 boost::lambda::if_then_else() 和 boost::lambda::if_then_else_return() 模板函式 - 它們都要求三個引數。 另外還提供了用於實現迴圈、轉型操作符,甚至是 throw - 允許 lambda 函式丟擲異常 - 的模板函式。

雖然可以用這些模板函式在 c++ 中構造出複雜的 lambda 函式,但是你必須要考慮其它方面,如可讀性和可維護性。 因為別人需要學習並理解額外的函式,如用 boost::lambda::if_then() 來替代已知的 c++ 關鍵字 if 和 else,lambda 函式的好處通常隨著它的複雜性而降低。 多數情況下,更為合理的方法是用熟悉的 c++ 結構定義乙個單獨的函式。

boost教程(三) 函式物件

include include include include void add int i,int j intmain include include include bool compare int i,int j intmain boost.ref include include includ...

Boost庫 功能介紹 function物件

boost庫是乙個非常強大的c 基礎庫,是c 標準的預先實驗場地,裡面有非常多的標準c 所沒有的擴充套件功能,非常實用。本文重點介紹boost庫中function的用法。它以物件的形式封裝了原始的函式指標或函式物件,能夠容納任意符合函式簽名的可呼叫物件。介紹function物件本身不是目的,只是為後...

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

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