如何创建最大的Functor?

时间:2014-11-24 15:14:08

标签: c++ max bind functor c++98

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

我尝试过使用std::pointer_to_binary_function,但问题似乎是我无法用std::max制作仿函数:https://stackoverflow.com/a/12350574/2642059

我也试过std::ptr_fun,但我也遇到了类似的错误。

1 个答案:

答案 0 :(得分:2)

由于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

但是很糟糕,因为你现在来复制所有东西(尽管如果你只是使用int,这是完全没问题的)。最好的方法是完全避免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;
};