條款38:遵循按值傳遞的原則來設計仿函式
仿函式都是 pass-by-value
function for_each(inputiterator first, inputiterator last, function f); //f按值傳遞, 結果按值返回
函式物件按值傳遞和按值返回,所以函式物件要盡可能小(物件拷貝開銷大)
條款39:確保判別式是"純函式"
條款40:若乙個類是仿函式,則應使它可配接
條款41:理解ptr_fun、mem_fun、mem_fun_ref
templatefunction for_each(inputiterator first, inputiterator last, function f)
乙個函式f和乙個物件x,如果在x物件呼叫f,則:
f(x); //f是乙個非成員函式
x.f(); //f是成員函式,且x是乙個物件或物件引用
x->f(); //f是成員函式,且x是指向物件x的指標
現在有乙個用於測試widget物件的非成員函式:
bool test(widget& widget);
和乙個存放widget物件的容器: std::vectorvec;
我們可以使用: for_each(vec.begin(), vec.end(), test);
現在假設test函式是widget的成員函式,即widget支援自測:
classwidget ;
如果我們如下呼叫:
for_each(vec.begin, vec.end(), &widget::test); //編譯錯誤!!!
mem_fun:如果乙個存放widget*的指標容器,需要呼叫自己定義的成員函式時:
for_each(vecptr.begin(), vecptr.end(), mem_fun(&widget::test));
mem_fun_ref:如果乙個存放widget的容器,需要呼叫自己定義的成員函式時:
for_each(vec.begin(), vec.end(), mem_fun_ref(&widget::test));
條款42:確保less與 operator< 具有相同語義
STL 學習筆記 之 函式物件
c stl,三大核心元件 containers,iterators以及algorithms,即容器,迭代器和演算法。另外還一種重要元件,即函式物件 functionobject r 函式物件又稱為仿函式 functor 函式物件其實就是乙個行為類似函式的 東西 它可以沒有引數,也可以帶有若干引數,其...
STL 函式物件學習
函式物件 乙個過載了運算子 的個物件,可以像乙個函式一樣使用。普通的函式 bool comp int val 函式物件,宣告為模板類,並可以接受引數,具有更大擴充套件性 templateclass comp bool operator t val private t m val 呼叫上面兩種情況,實...
STL 函式物件
一 函式物件 functor stl中提供了一元和二元函式的兩種functor,通過unary function和binary function提供了這兩種不同引數數量的functor的基本結構,在這兩個型別中,分別內嵌定義一元和二元函式操作在模版推演的時候需要用到的typedef.一元函式的定義為...