What does void Classname::operator()(){ .... } do?
What does void Classname::operator()(){ .... } do?
我正在处理一些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
函数。
这不是重载构造函数,而是重载函数调用操作符。如果您为一个类定义了这一点,那么您就可以像调用函数一样调用该类的实例。这样的对象一般称为函子。
这是重载操作符'()'的代码它基本上允许你将类用作不带参数的函数,你也可以像这样:
SomeOtherClass Classname::operator ()(Argument1 a, Argument2 b, *[etc]*); and use it like:
Classname instance;
SomeOtherClass someother = instance(arg1, arg2);
有关重载的更多信息,您可以查看:Operators_in_C_and_C + +
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 为什么 std::optional::operator=(U&&) 要求你是非标量类型?
- 'operator='已弃用:改用 QDir::setPath()
- 过载'operator new'如何导致无限循环?
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- 如何使用 do while 循环确定最高值和最低值
- 与'operator='不匹配(操作数类型'String'且"void")
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 处理"no operator found"
- 如何编写 operator= 用于使用虚拟方法与非平凡成员的匿名联合
- 运算符重载:"operator+"必须采用零个或一个参数
- 使用 operator() 扩展 Eigen::EigenBase
- do while 循环中的 if 语句以 yes 或 no 结尾
- 以某种方式告诉编译器"Do not process line of code"
- 错误消息:使用"string* +="后"no match for 'operator+='"
- 有没有办法修改'operator->',以便'z->im'返回复数的虚部
- 在 C 或 C++ 中,循环可以同时具有 "do" 和"while"部分吗?
- What does void Classname::operator()(){ .... } do?
- what does ++operator do in this void uart_puts(unsigned char