What does void Classname::operator()(){ .... } do?

What does void Classname::operator()(){ .... } do?

本文关键字:do operator does void Classname What      更新时间:2023-10-16

我正在处理一些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);

这将为列表中的每个整数调用instanceoperator()(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 + +