我在C ++ 98工作,我想绑定std::max
。但我需要一个functor对象与std::bind1st
一起使用。
我尝试过使用std::pointer_to_binary_function
,但问题似乎是我无法用std::max
制作仿函数:https://stackoverflow.com/a/12350574/2642059
我也试过std::ptr_fun
,但我也遇到了类似的错误。
答案 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;
};