2011-10-06 47 views
3

進出口工作我的方式,通過一些C++代碼,並遇到下列void Classname :: operator()(){....}是做什麼用的?

void Classname::operator()() 
{ 
    //other code here 
} 

我認爲這事做超載的構造來了,但有人可以詳細談談那一點?

+0

另請參閱http://stackoverflow.com/questions/2349867/how-can-it-be-useful-to-overload-the-function-call-operator。 –

回答

4

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)可以執行您所需的任何處理。這比傳遞原始函數更靈活,因爲這些成員變量是非全局數據。

0

它不會重載構造函數 - 它會重載函數調用操作符。如果你爲一個類定義了這個,那麼你可以像調用一個函數一樣調用該類的一個實例。這樣的對象通常稱爲函子

3

它使你的類成爲一個叫做「Functor」的對象......它經常被用作閉包類型的對象,以便用對象嵌入一個狀態,然後將對象稱爲 - 如果它是一個函數,但是一個具有「狀態性」的函數,沒有全局可訪問的靜態變量的缺點,例如傳統的C函數會試圖用內部靜態變量來管理「狀態」。

例如,對於

void Classname::operator()() 
{ 
    //other code here 
} 

Classname實例可以被稱爲像class_name_instance(),並且會像一個void函數不帶任何參數。

0

這是代碼「)(」重載運算符,它基本上可以讓你使用類爲沒有參數的函數,你也可以有類似:

SomeOtherClass Classname::operator()(Argument1 a, Argument2 b, *[etc]*); and use it like: 
Classname instance; 
SomeOtherClass someother = instance(arg1, arg2); 

欲瞭解更多信息超載你可以檢查: Operators_in_C_and_C++

相關問題