2011-10-06 93 views
3

进出口工作我的方式,通过一些C++代码,并遇到下列void Classname :: operator()(){....}是做什么用的?

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

我认为这事做超载的构造来了,但有人可以详细谈谈那一点?

+0

另请参阅http://stackoverflow.com/questions/2349867/how-can-it-be-useful-to-overload-the-function-call-operator。 –

回答

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

0

它不会重载构造函数 - 它会重载函数调用操作符。如果你为一个类定义了这个,那么你可以像调用一个函数一样调用该类的一个实例。这样的对象通常称为函子

3

它使你的类成为一个叫做“Functor”的对象......它经常被用作闭包类型的对象,以便用对象嵌入一个状态,然后将对象称为 - 如果它是一个函数,但是一个具有“状态性”的函数,没有全局可访问的静态变量的缺点,例如传统的C函数会试图用内部静态变量来管理“状态”。

例如,对于

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

Classname实例可以被称为像class_name_instance(),并且会像一个void函数不带任何参数。

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++

相关问题