我写了一小段代码会引发很多错误,如果我不使用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。
此外,dist
是std::vector<int>
但奇怪的是,如果我用decltype(f2)
替换f2
,代码就会出错。
为什么会这样?
答案 0 :(得分:3)
priority_queue
模板类的第三个参数是谓词的类型。此处decltype(f2)
实际上提供了f2
类型,而不是decltype
,您只需撰写std::function<bool(int,int)>
。
答案 1 :(得分:2)
参考documentations,priority_queue
必须收到3种类型。此处,类型int
和vector<int>
后跟f2的类型,而不是f2。 decltype
为您提供的类型不是变量。
请注意:decltype
= typeof
但是以官方方式
答案 2 :(得分:-1)
我不知道为什么你使用这个std::function<bool(int,int)>
作为lambda函数的返回类型,我会简单地使用auto
,因为std :: function也可能在类型构造期间提供一些开销。如果您不知道它的作用,请让编译器为您做出最佳选择。