C++11-14 第11講 decltype
阿新 • • 發佈:2018-12-14
decltype從表示式的型別推斷出要定義的變數型別
map<string, float> cell;
decltype(cell)::value_type elem;//推斷容器獲得型別
//1.用來宣告返回引數
//template<typename T1,typename T2>
//decltype(x + y) add(T1 x, T2 y);//錯誤因為x和y在後面
//要這樣寫
template<typename T1, typename T2>
auto add(T1 x, T2 y)->decltype(x + y);
2.超程式設計 //不明覺厲?
3.函式模板的使用
template<typename T> void test18_decltype(T obj) { map<string, float>::value_type elem1; map<string, float>coll; decltype(coll)::value_type elem2; typedef typename decltype(obj)::iterator iType;//c++11後可以這樣寫 //上面就是typedef typename T::tierator iType; decltype(obj) anotherObj(obj); }
4.lambda使用
auto cmp = [](const Person&p1, const Person & 2) {
return p1.lastname() < p2.lastname();
}
std::set<Person, decltype(cmp)>coll(cmp);//在面對lambda往往只有object沒有type,就要用decltype獲得type