在尝试为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:&#39; ThreadPool :: comp :: comp&#39; :没有重载函数需要2个参数c:\ users \ usr \ documents \ visual studio 2013 \ projects \ secondtask \ queue.hpp。你能帮我解决这个问题吗?
答案 0 :(得分:3)
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`