这段关于函数对象的内容是什么

what is this para about on function objects

本文关键字:是什么 对象 段关于 函数      更新时间:2023-10-16

我在一本书中看到过这句话,但我不明白。这句话是:"<function>中的模板帮助你构建定义运算符()的对象。这些对象被称为函数对象,可以在很多地方代替函数指针。"。

请告诉我operator()是什么,我也想帮助我理解"函数对象"在这种情况下的含义。

函数对象(通常称为函子)只是一个行为类似函数的对象。例如,如果您想要一个在调用之间跟踪某些内容的函数,这将非常有用。

要像函数一样使用对象,您需要能够调用它,如下所示:

reallyAnObject(some, args);

您可以通过为类重载operator()来实现这一点。

<functional>标头提供了各种有用的工具来帮助您生成函数对象。

这里有一个非常简单的例子:

struct Functor {
    void operator() (int i)
    {
        std::cout << "Really an object. Called with " << i << 'n';
    }
};
int main() {
    Functor f;
    // prints "Really an object. Called with 1"
    f(1);
}

现在,我想一个更有用的功能可能是打印一整串数字,全部打印到同一个流中(尽管仍然非常做作):

struct Printer {
    std::ostream& os_;
    Printer (std::ostream& os) : os_(os) {}
    void operator() (int i)
    {
        os << i;
    }
};
int main() {
    // prints "12" to stdout
    Printer p {std::cout};
    p(1);
    p(2);
    // prints "34" to stderr
    Printer p2 {std::cerr};
    p2(3);
    p2(4);
}

更复杂的例子通常有助于与标准<algorithm> s进行交互。

<functional>标头提供了许多人们经常自己编写的有用内容,例如std::plusstd::greaterstd::unary_negate。它还提供了std::functionstd::bind,但我现在不想使用它们,它们有点棘手。

相关文章: