进出口工作我的方式,通过一些C++代码,并遇到下列void Classname :: operator()(){....}是做什么用的?
void Classname::operator()()
{
//other code here
}
我认为这事做超载的构造来了,但有人可以详细谈谈那一点?
进出口工作我的方式,通过一些C++代码,并遇到下列void Classname :: operator()(){....}是做什么用的?
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
函数不带任何参数。
这是代码“)(”重载运算符,它基本上可以让你使用类为没有参数的函数,你也可以有类似:
SomeOtherClass Classname::operator()(Argument1 a, Argument2 b, *[etc]*); and use it like:
Classname instance;
SomeOtherClass someother = instance(arg1, arg2);
欲了解更多信息超载你可以检查: Operators_in_C_and_C++
另请参阅http://stackoverflow.com/questions/2349867/how-can-it-be-useful-to-overload-the-function-call-operator。 –