在尝试为我的Heap数据结构实现自定义比较器支持时遇到问题
这是我想要的样子:
template <class T, class Pred = std::less<T>>
class ConcurrentPriorityQueue {
private:
template <class T>
class Node
{
private:
T data;
bool operator < (const Node<T>& t) {
return Pred(data, t.data);
}
};
};
这是我要使用的比较函子:
struct comp {
bool operator () (const std::pair<int, fn_type> &p1,
const std::pair<int, fn_type> &p2) const{
return p1.first < p2.first;
}
};
ConcurrentPriorityQueue<std::pair<int, fn_type>, comp> fqueue;
一切对我来说似乎都不错,但是我遇到了错误
错误2错误C2661:'ThreadPool :: comp :: comp':没有重载函数使用2个参数c:\ users \ usr \ documents \ visual studio 2013 \ projects \ secondtask \ queue.hpp。你能帮我这个忙吗?
最佳答案
Pred
是指一种类型,而不是该类型的实例。
当前,您正在尝试在执行Pred
时调用类型为Pred(data, t.data)
的构造函数,您首先必须创建Pred
的实例,以便能够在其上调用匹配的operator() (...)
。
下面的示例创建一个Pred
类型的临时实例,然后调用其operator()
;
return Pred () (data, t.data); // 1) create a temporary instance of `Pred`
// 2) call its operator() with `data` and `t.data`
关于c++ - 没有重载函数需要2个参数(functors),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22900782/