gpt4 book ai didi

c++ - 使 std::compare 函数成为一元的简单方法

转载 作者:行者123 更新时间:2023-11-28 00:13:14 32 4
gpt4 key购买 nike

我需要将不同的比较函数用作一元函数,其中一个值嵌入比较器中。为此,我创建了一个适配器类,例如:

template<typename T, typename Compare>
class CompareAdaptor : private Compare
{
public:
CompareAdaptor(T value)
: mValue(value)
{
}

bool operator()(T v) const
{
return Compare::operator()(v, mValue);
}

private:
T mValue;
};

现在我可以定义一个新的一元比较器,例如:

template<typename T>
using EqualTo = CompareAdaptor<T, std::equal_to<T>>;
template<typename T>
using LessEqual = CompareAdaptor<T, std::less_equal<T>>;

我的问题是:是否有更简单的方法(不使用适配器类)来定义那些一元比较器?我认为这是一个非常普遍的问题,您可能有更好的解决方案。

最佳答案

在 C++11 中,这是最好的。但我更希望谓词直接在调用站点构建:

std::find_if(begin(v), end(v), [limit](int i) { return i < limit; });

在 C++14 中,您可以使用返回类型推导来创建工厂函数:

template <class Comp>
auto predicate(typename Comp::second_argument_type rhs) {
return [c = Comp{}, rhs](typename Comp::first_argument_type lhs) {
return c(lhs, rhs);
};
}

示例调用:predicate<std::less<int>>(4)返回函数对象。

Live on Coliru

关于c++ - 使 std::compare 函数成为一元的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31936884/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com