0

我正在尝试在容器方法 #3 中使用 Storing boost::function 对象,而 gcc 对此有所抱怨->

EventComparator.hpp:39,34 - 错误 - 二进制表达式的无效操作数('const request_type'(又名'const std::function')和'const request_type')

template<typename Callback, typename Function>
bool Comparator(const Function & lhs, const Function & rhs) {
    typedef typename std::conditional < std::is_function<Callback>::value,
            typename std::add_pointer<Callback>::type, Callback >::type request_type;
    if (const request_type * lhs_internal = lhs.template target<request_type>()) {
        if (const request_type * rhs_internal = rhs.template target<request_type>())
            return *rhs_internal == *lhs_internal;
    }
    return false;
}

template<typename ...Args>
class EventComparator : std::function<Args...> {
public:
    typedef std::function<Args...> Function;

    bool (*typeHolder)(const Function &, const Function &);
public:
    EventComparator() {
    }

    template<typename T>
    EventComparator(T function)
        : Function(function), typeHolder(Comparator<T, Function>) {
    }

    template<typename T>
    EventComparator & operator=(T function) {
        Function::operator=(function);
        typeHolder = Comparator<T, Function>;
        return *this;
    }

    friend bool operator==(const Function & lhs, const EventComparator & rhs) {
        return rhs.typeHolder(lhs, rhs);
    }

    friend bool operator==(const EventComparator & lhs, const Function & rhs) {
        return rhs == lhs;
    }

    friend void swap(EventComparator & lhs, EventComparator & rhs) {
        lhs.swap(rhs);
        lhs.typeHolder.swap(rhs.typeHolder);
    }
};
4

0 回答 0