【发布时间】:2020-06-14 11:34:41
【问题描述】:
在我的 C++ 代码中,我编写了两个函子,它们接受参数,一个返回总和,另一个返回减法,因此我可以将它们用作函数的参数。像这样:
template<class T>
class AddValues{
public:
T operator()(const T &value1, const T &value2) {
return value1 + value2;
}
};
template<class T>
class SubstractValues{
public:
T operator()(const T &value1, const T &value2) {
return value1 - value2;
}
};
但现在我想写 6 个仿函数,每个仿函数接受两个参数并返回真/假,第一个值是 <,<=,>,>=,==,!=,而不是另一个。
有没有比定义 6 个类更清晰的方法呢? 我正在使用 C++11
【问题讨论】:
-
尝试使用 lambda。它们实际上是在替换 c++11 中的仿函数。
-
应该已经定义了所有的仿函数。请参阅 std::plus、std::minus、std::less、std::greater、...。强烈建议重用那些反对重新定义它们。
-
并且 lambdas 不会替换 C++11 中的仿函数。 Lambdas 可以使一些用例更容易,但适当的函子的好处是它们被命名。原始 lambda 有时比正确命名的仿函数更难理解,因为您必须检查代码才能了解它的实际作用。
-
@MikaelH 谢谢,但我想写我的,你能帮忙吗?
-
@MikaelH 出于好奇,您能否在这里展示如何使用 std::greater 和其他?
标签: c++ class templates generics functor