我正在研究一些C ++代码并遇到以下内容
void Classname::operator()()
{
//other code here
}
我认为这与重载构造函数有关,但有人可以详细说明吗?
答案 0 :(得分: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
的{{1}}成员。您可以在operator()(int)
对象中包含成员变量,以便instance
可以执行您需要的任何处理。这比传递原始函数更灵活,因为这些成员变量是非全局数据。
答案 1 :(得分:3)
它使你的类成为一个名为“Functor”的对象...它经常被用作闭包类型对象,以便在对象中嵌入一个状态,然后调用该对象,如果它是一个函数,但是一个具有“状态”的函数,没有全局可访问静态变量的缺点,就像传统的C函数试图用内部静态变量来管理“状态”一样。
例如,
void Classname::operator()()
{
//other code here
}
Classname
的实例可以像class_name_instance()
一样调用,并且行为类似于不带参数的void
函数。
答案 2 :(得分:0)
它没有重载构造函数 - 它正在重载函数调用操作符。如果为类定义它,则可以调用类的实例,就好像它是一个函数一样。这样的对象通常称为仿函数。
答案 3 :(得分: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++