見一下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...