c++ - 谓词和仿函数有什么区别?

标签 c++ terminology predicate functor

我只是read有人用构造函数和 operator() predicate 调用类:

// Example
class Foo {
  public:
    Foo(Bar);
    bool operator()(Baz);
  private:
    Bar bar;
};

但是,我以前从未听说过在这种情况下使用过谓词 这个词。我会称这样的东西为仿函数。对我来说,谓词 应该是形式逻辑领域的东西。

这引发了以下问题:

  • 这是 Foo 之类的常用词吗?
  • 这两个术语是否可以互换使用,或者它们的意思略有不同?
  • 或者
    • 返回类型(bool 与其他类型)有关系吗?
    • operator()const 怎么样?

最佳答案

Functor 是一个术语,指的是在表达式(具有零个或多个参数)中支持运算符 () 的实体,即在语法上表现为函数的东西。 Functor 不一定是某个重载了operator() 的类的对象。普通的函数名也是仿函数。虽然在某些情况下,您可以看到术语“仿函数”在更狭义和排他的意义上使用:只是类对象,而不是普通函数。

谓词 是一种特定类型 的仿函数:计算结果为 bool 值的仿函数。它不一定是 bool 类型的值,而是具有“ bool ”语义的任何类型的值。不过,该类型应该可以隐式转换为 bool

关于c++ - 谓词和仿函数有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11805677/

相关文章:

c++ - _Pass_fn : where is the constructor?

c++ - 如何排序 vector<vector<int>>

c++ - 如何在 Visual C++ 中以编程方式设置断点?

c++ - const vector 引用重载

java - Java到底是什么?

c++ - std::set 在运行时选择更少或更大的比较器

c++ - QML - 实现 C++ ListModel 的最佳方式

java - 类、对象、实体 : What's the difference?

scala - 环境 monad 中术语环境的含义

c# - Expression.Call - 调用 linq 扩展 : FirstOrDefault, 其中