在尝试为我的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/

10-11 12:30