我正在处理一些 C++ 代码并遇到以下问题
void Classname::operator()()
{
//other code here
}
我认为这与重载构造函数有关,但有人可以详细说明吗?
我正在处理一些 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
不带参数的函数。
它没有重载构造函数——它重载了函数调用运算符。如果您为一个类定义 this,那么您可以调用该类的一个实例,就好像它是一个函数一样。这样的对象通常称为函子。
这是重载运算符'()'的代码,它基本上允许您将类用作没有参数的函数,您还可以使用以下内容:
SomeOtherClass Classname::operator ()(Argument1 a, Argument2 b, *[etc]*); and use it like:
Classname instance;
SomeOtherClass someother = instance(arg1, arg2);
有关重载的更多信息,您可以查看: Operators_in_C_and_C++