我在一本书中看到了这个陈述,我不明白。句子是:&#34; <function>
中的模板可以帮助您构造定义operator()的对象。这些对象称为函数对象,可用于代替许多地方的函数指针&#34;。
请告诉我operator()
是什么,我也希望在此背景下了解&#34; 功能对象&#34; 的含义。
答案 0 :(得分:2)
函数对象(通常称为仿函数)只是一个可以像函数一样运行的对象。例如,如果您想要一个跟踪调用之间某事的函数,这很有用。
要使用类似函数的对象,您需要能够调用它,如下所示:
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>
进行交互。
<functional>
标题提供了许多人们经常自己编写的有用内容,例如std::plus
,std::greater
,std::unary_negate
。它还提供std::function
和std::bind
,但我现在远离那些,它们有点棘手。