1. 程式人生 > >C++11中的技術剖析( std bind原理簡單圖解)

C++11中的技術剖析( std bind原理簡單圖解)

簡化 靜態成員函數 div 語法 con mar clear 函數 多余

此文為轉載,好像原出處的原文已經無法打開了。

本文解釋了bind 是如何工作的。為了清晰,我對圖中的語法作了一些簡化(例如,省略函數調用操作符的參數類型),並且簡化了 bind 的實現.

  1. bind 可以用來將用戶提供的需要一個參數的函數轉換成不需要參數的函數對象。綁定的值(在這個例子中是123)存儲在函數對象內並且會被自動傳遞給用戶指定的函數:

技術分享圖片

  1. 參數綁定也可以用於將類成員函數轉換成零參數的函數對象。猿類們都知道,非靜態成員函數需要一個隱式的 this 參數。這意味著需要綁定一個合適的類實例指針到這個函數對象:
    技術分享圖片

  2. 相應地,隱式的 this 指針也可以顯式地傳遞給需要一個參數的函數對象:
    技術分享圖片

  3. 函數對象經常同時使用提前綁定的參數和調用時才提供的參數。這個可以用成員函數來實現:
    技術分享圖片

  4. 當然也可以使用非成員函數:
    技術分享圖片

  5. 有些時候函數對象被調用時會提供多余的參數,而這些參數是目標函數不需要的。bind 會自動忽略這些多余的參數:
    技術分享圖片

  6. 這些多余的參數不需要一定在函數對象簽名的最後:
    技術分享圖片

  7. 最後, bind 還允許重新組織函數對象的參數順序:
    技術分享圖片

C++11中的技術剖析( std bind原理簡單圖解)