C 必知必會(6)

2021-06-22 06:54:19 字數 517 閱讀 9707

見一下stack介面卡採用預設deque的例子

template>

class stack

r operator()(a1 a1, a2 a2) const

private:

r (*fp_)(a1, a2);

直接例項化這個模板有點麻煩:

boolisgreater(int, int);

std::sort(b, e, pfun2(isgreater));  //痛苦!

對於此種情況,通常可以提供乙個輔助函式,該函式唯一用途在於推導模板實參,為的是可以像施魔法一般去特化乙個類模板:

template

inline pfun2makepfun(r(*pf)(a1, a2))

std::sort(b,e,makepfun(isgreater));      //好多了…

乙個函式可以被其他函式模板和非模板函式過載。

sfinae(substition failure is neo an error)替換失敗並非錯誤

C 必知必會

條款2 多型 2 條款3 設計模式 5 條款4 stl 8 條款5 引用是別名而非指標 10 條款6 陣列形參 13 條款7 常量指標與指向常量的指標 16 條款8 指向指標的指標 19 條款9 新式轉型操作符 21 條款10 常量成員函式的含義 25 條款11 編譯器會在類中放東西 29 條款12...

C 必知必會 placement new

placement new placement new 是過載operator new的乙個標準 全域性的版本,它不能被自定義的版本代替 不像普通的operator new和operator delete能夠被替換成使用者自定義的版本 它的原型如下 void operator new size t,...

C 必知必會(4)

直接呼叫建構函式是行不通的,然而可以通過使用placement new來哄騙編譯器呼叫建構函式 void operatornew size t,void p throw placement new是operator new的乙個標準的過載版本,也位於全域性名字空間中,但和我們通常看到的operato...