我正在处理一些c++代码,遇到了以下
void Classname::operator()()
{
//other code here
}
我认为这与重载构造函数有关,但有人能详细说明吗?
operator()
是函数调用操作符。它允许您像使用函数一样使用类实例:
Classname instance;
instance(); //Will call the overload of operator() that takes no parameters.
这对于函子和其他各种c++技术非常有用。你可以传递一个"函数对象"。这只是一个具有operator()
过载的对象。所以你把它传递给一个函数模板,然后函数模板把它当作一个函数来调用。例如,定义了Classname::operator()(int)
:
std::vector<int> someIntegers;
//Fill in list.
Classname instance;
std::for_each(someIntegers.begin(), someIntegers.end(), instance);
这将为列表中的每个整数调用instance
的operator()(int)
成员。您可以在instance
对象中拥有成员变量,以便operator()(int)
可以执行您需要的任何处理。这比传递原始函数更灵活,因为这些成员变量是非全局数据。
它使你的类成为一个称为"Functor"的对象…它经常被用作闭包类型对象,以便在对象中嵌入一个状态,然后调用对象,就好像它是一个函数一样,但是这个函数具有"状态性",而没有全局可访问静态变量的缺点,就像传统的c函数那样,试图用内部静态变量来管理"状态"。
例如,用
void Classname::operator()()
{
//other code here
}
Classname
的实例可以像class_name_instance()
一样被调用,它的行为就像一个不带参数的void
函数。
这不是重载构造函数,而是重载函数调用操作符。如果您为一个类定义了这一点,那么您就可以像调用函数一样调用该类的实例。这样的对象一般称为函子。
这是重载操作符'()'的代码它基本上允许你将类用作不带参数的函数,你也可以像这样:
SomeOtherClass Classname::operator ()(Argument1 a, Argument2 b, *[etc]*); and use it like:
Classname instance;
SomeOtherClass someother = instance(arg1, arg2);
有关重载的更多信息,您可以查看:Operators_in_C_and_C + +