1. 程式人生 > >C++11-14 第11講 decltype

C++11-14 第11講 decltype

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