c – 如何创建最大的Functor?

我在C 98工作,我想绑定std :: max.但我需要一个functor对象与std :: bind1st一起使用.

我尝试过只使用std :: pointer_to_binary_function,但问题似乎是我无法用std :: max创建一个functor:https://stackoverflow.com/a/12350574/2642059

我也试过std :: ptr_fun,但是我得到了类似的错误.

最佳答案 由于
this answer中的问题,你不能为max编写一个真正的包装函数,因为你不能创建const T&的任何类型.你能做的最好的事情是:

template <typename T>
struct Max
: std::binary_function<T, T, T>
{
    T operator()(T a, T b) const
    {
        return std::max(a, b);
    }
};

std::bind1st(Max<int>(), 1)(2) // will be 2

但这很糟糕,因为你现在必须复制一切(尽管如果你只是使用整数,这是完全没问题的).最好的可能是完全避免bind1st:

template <typename T>
struct Max1st
{
    Max1st(const T& v) : first(v) { }

    const T& operator()(const T& second) const {
        return std::max(first, second);
    }

    const T& first;
};
点赞