這只是運算符重載,並沒有任何與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