3

我正在处理一些 C++ 代码并遇到以下问题

void Classname::operator()()
{   
    //other code here
}

我认为这与重载构造函数有关,但有人可以详细说明吗?

4

4 回答 4

4

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)可以执行您需要的任何处理。这比传递原始函数更灵活,因为这些成员变量是非全局数据。

于 2011-10-06T03:11:38.670 回答
3

它使您的类成为一个称为“Functor”的对象……它通常用作闭包类型的对象,以便在对象中嵌入状态,然后像调用函数一样调用对象,但是函数具有“状态”,没有全局可访问静态变量的缺点,就像您使用传统 C 函数尝试使用内部静态变量管理“状态”一样。

例如,与

void Classname::operator()()
{   
    //other code here
}

的实例Classname可以像 一样调用class_name_instance(),并且其行为类似于void不带参数的函数。

于 2011-10-06T03:13:14.557 回答
0

它没有重载构造函数——它重载了函数调用运算符。如果您为一个类定义 this,那么您可以调用该类的一个实例,就好像它是一个函数一样。这样的对象通常称为函子

于 2011-10-06T03:11:39.643 回答
0

这是重载运算符'()'的代码,它基本上允许您将类用作没有参数的函数,您还可以使用以下内容:

SomeOtherClass Classname::operator ()(Argument1 a, Argument2 b, *[etc]*); and use it like:
Classname instance;
SomeOtherClass someother =  instance(arg1, arg2);

有关重载的更多信息,您可以查看: Operators_in_C_and_C++

于 2011-10-06T03:16:28.430 回答