Predicate和Functor之间有什么区别?

bit*_*ask 10 c++ terminology predicate functor

我只是读了一个人用一个构造函数和operator()一个谓词来调用一个类:

// Example
class Foo {
  public:
    Foo(Bar);
    bool operator()(Baz);
  private:
    Bar bar;
};
Run Code Online (Sandbox Code Playgroud)

但是,我之前没有听过谓语在这种情况下被使用过.我会称这样的东西为仿函数.对我来说,谓词将来自形式逻辑领域.

这提出了以下问题:

  • 这是一个常见的词Foo吗?
  • 两个术语是否可以互换使用,还是意味着略有不同?
  • 要么
    • 返回类型(bool与其他东西相比)是否与它有关?
    • 怎么样的operator()存在const

AnT*_*AnT 23

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

一个谓语是一个特定类型的函子的:计算结果为布尔值的函子.它不一定是booltype 的值,而是具有"boolean"语义的任何类型的值.该类型应该可以隐式转换为bool.

  • 尼斯.在一般意义上,仿函数是*任何通过设计表示函数*的对象/工件.无论是语法上和/或`operator()`都是糖. (3认同)