没有重载函数需要2个参数(仿函数)

时间:2014-04-06 22:27:04

标签: c++ templates

在尝试为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。你能帮我解决这个问题吗?

1 个答案:

答案 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`