这只是运算符重载,并没有任何与C++ 11或支持多线程。重载运算符只是一个有趣名字的正常函数(这可能有点过于简化,但对初学者来说这是一个很好的经验法则)。
您的班级有一个函数名为()
。就这样。 技术上,你可能也有一个名为功能foo
或f
或TwoParentheses
。
考虑一个简单的例子:
#include <iostream>
class Example
{
public:
void operator()() { std::cout << "()"; }
void foo() { std::cout << "foo"; }
void TwoParentheses() { std::cout << "TwoParentheses"; }
};
int main()
{
Example e;
e.operator()();
e.foo();
e.TwoParentheses();
}
现在呼吁在这个例子中重载运算符就像main
,拼写出整个.operator()
部分,是很没有意义的,因为重载运算符的目的是让调用代码简单。你会改为调用你的函数是这样的:
int main()
{
Example e;
e();
}
正如你可以看到,现在e();
看起来完全一样,如果你调用的函数。
这就是为什么operator()
毕竟是一个特殊的名字。在模板中,可以使用operator()
和相同的语法处理对象。
考虑一下:
#include <iostream>
class Example
{
public:
void operator()() { std::cout << "Example.operator()\n"; }
};
void function() { std::cout << "Function\n"; }
template <class Operation>
void t(Operation o)
{
o(); // operator() or "real" function
}
int main()
{
Example object;
t(object);
t(function);
}
这就是为什么operator()
在C++泛型编程的一个重要功能,往往需要的原因。
在C++中搜索“functor” – P0W 2014-10-12 09:01:03