2015-06-15 48 views
0

我有这样priority_queue自定义比较器作为一个类的方法

priority_queue<int, std::vector<int>, decltype(&VD::CompareByDistance)> pqDistances(&VD::CompareByDistance); 

代码,其中

class VD 
{ 
    ... 
    bool CompareByDistance(int indexLeft, int indexRight) const; 
}; 

,但我得到的错误

错误C2064:术语不计算为函数取2个参数

我如何传递类成员作为compator,事情是我想比较器来访问它的实例字段。谢谢。

+0

顺便说一下,这个比较函数真的非常量吗?这并不是很习惯。 –

+0

@BaummitAugen它是常量,谢谢 – Yola

回答

1
bool CompareByDistance(int indexLeft, int indexRight); 

需要三个参数:this终场前和两个int秒。

此外,priority_queue模板参数的参数数量错误:您希望调用哪个非静态方法的VD的实例?

一种解决方法,这将是“携带”了你的实例是这样的:

VD v; 
auto comp = [&](int i1, int i2) {return v.CompareByDistance(i1, i2);} 

comp对象现在将是您的队列中的有效模板实参。例如:

struct A{ 
    bool compare (int, int) const {return true;} 
}; 

int main() 
{ 
    A a; 
    auto comp = [&](int i, int i2) {return a.compare(i, i2);}; 
    std::priority_queue<int, std::vector<int>, decltype(comp)> q (comp); 
} 
+0

我有同样的错误。 lambda捕获这个,这是一个问题 – Yola

+0

@Yola你忘了将'comp'传递给队列的构造函数吗?适用于我。 ([Live](http://coliru.stacked-crooked.com/a/fed72acd2d03b6d7)) –

+0

虽然CompareByDistance实际使用了'this'指针吗?否则,我们可以简单地将它设为静态 – KABoissonneault

相关问题