我已经看到了operator()
在 STL 容器上的使用,但它是什么以及你什么时候使用它?
问问题
12209 次
2 回答
10
该运算符将您的对象变成函子。这是如何完成的很好的例子。
下一个示例演示如何实现一个类以将其用作仿函数:
#include <iostream>
struct Multiply
{
double operator()( const double v1, const double v2 ) const
{
return v1 * v2;
}
};
int main ()
{
const double v1 = 3.3;
const double v2 = 2.0;
Multiply m;
std::cout << v1 << " * " << v2 << " = "
<< m( v1, v2 )
<< std::endl;
}
于 2011-01-14T09:05:54.440 回答
4
它使对象像函数一样“可调用”。与函数不同的是,对象可以保持状态。实际上,一个函数可以使用静态局部函数在微弱的意义上做到这一点,但是对于任何线程在任何上下文中对该函数的任何调用,该静态局部变量都会永久存在。
将对象用作函数时,状态只是该对象的成员,并且您可以拥有同一类的其他对象,这些对象具有自己的一组成员变量。
整个 boost::bind(它基于旧的 STL 绑定器)都是基于这个概念。
该函数具有固定的签名,但通常您需要比签名中实际传递的参数更多的参数来执行操作。
于 2011-01-14T09:18:57.863 回答