Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这一段关于函数对象的内容是什么_C++_Stl - Fatal编程技术网

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

C++ 这一段关于函数对象的内容是什么,c++,stl,C++,Stl,我在一本书中看到了这句话,我不明白。这句话是:“中的模板帮助您构造定义运算符()的对象。这些对象称为函数对象,可以在许多地方代替函数指针。” 请告诉我什么是operator(),我也想得到一些帮助来理解“函数对象”在本文中的含义。函数对象(通常称为函子)只是一个可以像函数一样运行的对象。例如,如果您想要一个函数在调用之间跟踪某些内容,那么这非常有用 要像函数一样使用对象,您需要能够调用它,如下所示: reallyAnObject(some, args); 通过为类重载operator()可以实

我在一本书中看到了这句话,我不明白。这句话是:“
中的模板帮助您构造定义运算符()的对象。这些对象称为函数对象,可以在许多地方代替函数指针。”

请告诉我什么是
operator()
,我也想得到一些帮助来理解“函数对象”在本文中的含义。

函数对象(通常称为函子)只是一个可以像函数一样运行的对象。例如,如果您想要一个函数在调用之间跟踪某些内容,那么这非常有用

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

reallyAnObject(some, args);
通过为类重载
operator()
可以实现这一点

标题提供了各种有用的工具来帮助您创建函数对象

下面是一个非常简单的示例:

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);
}
结构函子{ void运算符()(int i) {
std::你能给我一个例子来进一步解释它吗。@codingisfun已经在编写它了!我认为上面代码的输出将是一个真正的对象。用1调用是吗?@codingisfun正确。谢谢你终于得到了它。它对函数对象和各种标准函子有深入的解释。我发现它是一个有用的请注意,该文档中针对编程问题提出的许多解决方案在C++11中被弃用,但它仍然回答了您的问题。相关(如果不是重复的话):
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);
}