这段关于函数对象的内容是什么
what is this para about on function objects
我在一本书中看到过这句话,但我不明白。这句话是:"<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::plus
、std::greater
、std::unary_negate
。它还提供了std::function
和std::bind
,但我现在不想使用它们,它们有点棘手。
相关文章:
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 是什么让放置新调用对象的构造函数?
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 为对象分配整数.输出将是什么?
- 在C++中,创建'n'数量的对象的推荐方法是什么,其中n是用户定义的。我该怎么做?
- 使用 gtest 框架在单元测试代码中检查目标对象的私有变量的最佳实践是什么?
- 处理从列表中删除指向对象的指针的"healthy"方法是什么?
- 在C++中返回 IO 对象的目的是什么?
- 在C++中有多个指向单个对象的指针的正确方法是什么?
- 初始化对象以在 C++08 中作为参数传递的首选语法是什么?
- 将(临时的?)std::string传递给使用它来构造一个接受副本的对象的函数的最佳方法是什么?
- C++:允许临时对象调用非常量成员函数的设计理念是什么?
- 使用对函数和IO对象的引用(作为参数)的目的是什么
- 这些情况有什么区别?我怎么知道什么是临时对象?
- 在多个对象中初始化预定义成员变量的正确方法是什么?
- 在 c++ 中重置大型对象实例的最佳方法是什么
- 将对象传递给模板构造函数或方法的正确方法是什么
- 面向对象概念的例子车,这里应该是什么对象