// map::value_type is const std::pair
// need reload operator "==" to pass compile
template
bool
operator==(const pair p1, const pairp2)
// basic value type
template
int iscontain(container const &container, itemtype const &item) else else
}return index;
}};
// user defined value type
template
int iscontain(container const &container, itemtype const &item, bool func(itemtype const, itemtype const)) else else
}return index;
}};
對stl容器的元素求和:
元素為基本型別時,用std::accumulate(container.begin(), container.end(), 0);
即可,
當元素為自定義的型別時:
template itemtype accumulate(container container, itemtype getvalue)
return
sum;
}
struct pt
int getvalue(pt pt)
int main(), , };
auto sum = accumulate(pts,getvalue); // 執行ok
return
0;}
這樣寫模板函式,type itemtype 當作函式的返回型別, 傳入匿名(lambda) 函式時會報錯不能通過編譯
mismatched types ... main()::
例如:
auto getvaluex = (pt pt)->int;
auto sum = accumulate(pts,getvaluex);
或者:
auto sum = accumulate(pts,(pt pt));
所以模板函式傳入的函式應該是函式指標型別, 返回型別用std::result_of
獲取:
template
auto add(container& container, func getvalue) -> typename
std::result_oftypename container::value_type)>::type
return sum;
}
c 11模板 獲取函式的引數型別
假設我們已經知道乙個函式型別的定義double unsigned char unsigned char 如何獲取這個函式定義中的輸入和輸出引數型別呢?c 11提供的模板函式std function和std tuple element可以將乙個函式定義的輸入和輸出引數型別乙個乙個解析出來,下面是實現 ...
C 模板型別推導
內容參考 effective modern c 中的條款1 int x 27 const int cx x const int rx x const int p x 1.paramtype是個指標或引用,但不是個萬能引用 去引用不去const template void f t param f x ...
C 獲取終端型別
region 獲取終端型別 獲取終端型別 public static browserterminalmodel getbrowserterminal 瀏覽器終端型別 public class browserterminalmodel opera核心 public bool presto 蘋果 谷歌核...