在这段代码中使用decltype有什么用?

时间:2015-01-21 12:17:15

标签: c++ c++11 compilation compiler-errors 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和lambdas。
此外,diststd::vector<int>

但奇怪的是,如果我用decltype(f2)替换f2,代码就会出错。

为什么会这样?

3 个答案:

答案 0 :(得分:3)

priority_queue模板类的第三个参数是谓词的类型。此处decltype(f2)实际上提供了f2类型,而不是decltype,您只需撰写std::function<bool(int,int)>

答案 1 :(得分:2)

参考documentationspriority_queue必须收到3种类型。此处,类型intvector<int>后跟f2的类型,而不是f2。 decltype为您提供的类型不是变量。

请注意:decltype = typeof但是以官方方式

答案 2 :(得分:-1)

我不知道为什么你使用这个std::function<bool(int,int)>作为lambda函数的返回类型,我会简单地使用auto,因为std :: function也可能在类型构造期间提供一些开销。如果您不知道它的作用,请让编译器为您做出最佳选择。