2015-01-21 38 views
0

我有一個書面的一小塊代碼拋出了很多的錯誤,如果我dont't使用decltype關鍵字同時與decltype關鍵字它編譯罰款: -這段代碼中decltype的用法是什麼?

std::function<bool(int,int)> f2 = [dist](int n1,int n2) {if(dist[n1] < dist[n2]) return false ; return true ; } ; 
     priority_queue<int,vector<int>,decltype(f2)> pq(f2) ; 

在這裏,我想聲明一個priority_queue與我自己的自定義比較功能,所以我決定使用std::function和lambda。
此外,diststd::vector<int>

但奇怪的是,該代碼給出了錯誤,如果我只用f2取代decltype(f2)

爲什麼是這樣?

+0

爲了記錄,這是* not *是'priority_queue'的有效比較器。這不是一個嚴格的弱秩序。 – 2015-01-21 13:07:40

回答

2

參照documentationspriority_queue必須接收3種類型。在這裏,類型intvector<int>之後是f2的類型而不是f2。 decltype給你一個類型不是變量。

需要注意的是:decltype = typeof但在正式的方式

3

priority_queue模板類的第三個參數是謂詞的類型。這裏decltype(f2)實際上給出了一種f2,而不是decltype你可以只寫std::function<bool(int,int)>

+0

[Demo](http://ideone.com/2Xuyv6)。 – dasblinkenlight 2015-01-21 12:21:46

+0

但是我們不應該只給出f2而不是'std :: function '。 – 2015-01-21 12:22:19

+1

@ ps06756否,f2是此類型的對象。 – ForEveR 2015-01-21 12:23:19

-1

我不知道爲什麼你用這個std::function<bool(int,int)>爲您的返回類型爲您的lambda表達式,我只想用auto因爲代替的std ::函數也可以在類型建設期間提供一些開銷。如果你不知道它的功能,讓編譯器爲你做出最好的選擇。