(原文:http://blog.think-async.com/2010/04/bind-illustrated.html)
本文解釋了bind
是如何工作的。為了清晰,我對圖中的語法作了一些簡化(例如,省略函數調用操作符的參數類型),並且簡化了 bind
的實現.
1. bind
可以用來將用戶提供的需要一個參數的函數轉換成不需要參數的函數對象。綁定的值(在這個例子中是123)存儲在函數對象內並且會被自動傳遞給用戶指定的函數:
2. 參數綁定也可以用於將類成員函數轉換成零參數的函數對象。猿類們都知道,非靜態成員函數需要一個隱式的 this
參數。這意味着需要綁定一個合適的類實例指針到這個函數對象:
3. 相應地,隱式的 this
指針也可以顯式地傳遞給需要一個參數的函數對象:
4. 函數對象經常同時使用提前綁定的參數和調用時才提供的參數。這個可以用成員函數來實現:
5. 當然也可以使用非成員函數:
6. 有些時候函數對象被調用時會提供多余的參數,而這些參數是目標函數不需要的。bind
會自動忽略這些多余的參數:
7. 這些多余的參數不需要一定在函數對象簽名的最后:
8. 最后, bind
還允許重新組織函數對象的參數順序: