我有这样的代码
priority_queue<int, std::vector<int>, decltype(&VD::CompareByDistance)> pqDistances(&VD::CompareByDistance);
其中
class VD
{
...
bool CompareByDistance(int indexLeft, int indexRight) const;
};
但我得到错误
错误C2064:术语不评估为采用2个参数的函数
如何将类成员作为编译器传递,问题是我希望比较器访问其实例字段。感谢。
答案 0 :(得分:1)
bool CompareByDistance(int indexLeft, int indexRight);
有三个参数:this
- 指针和两个int
s。
除此之外,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);
}