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