進出口工作我的方式,通過一些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。 –