2011-08-18 129 views
-2

函數指針函子嗎?是否有一個虛擬仿函數可以幫助兄弟仿函數靜靜地編譯?函數指針和函子

+5

什麼是兄弟函子? –

+0

或虛擬函子 –

+0

C++ 11引入了「可調用類型」的概念,這意味着(鬆散地)某些像'INVOKE(yourthing,a,b,c)'這樣的結構擴展爲'yourthing(a, b,c)',必須有意義;它包含函數指針和函數,可能是一般思考的好方法。 –

回答

4

至少與術語在C常使用++(警告:它的使用完全不同相對於其它語言如Haskell中),一個仿函數是一個類(或類的一個實例),該過載operator()所以它可以像一個函數一樣被調用。

因爲它們使用相同的語法,所以可以寫一個模板來接受函數指針或函數互換實例。然而,並非所有的算法都會這樣做 - 有些人預計(例如)您爲argument_typeresult_type之類的東西提供了typedef。標準庫提供了幾個類(unary_functionbinary_function)作爲你的函子的基類來提供這些類。如果你願意,你可以自己提供 - 這些基類純粹是爲了方便(有些人不覺得它們特別方便)。

+0

+1,但補充說一個函數指針不是*實際*函子,儘管它可以用於需要其中的模板。 – Wyzard

+0

我一直聽到和定義過,functor是可以調用的任何東西,無論是函數對象還是實際函數。而你所稱的函子是一個函數對象。 –

+0

非常感謝,我無法贊成,但已將您的答覆標記爲已接受的答案,這非常有用。 –

0

函數指針是實函數的地址。一個函子是一個類,operator()已經超載;這些類的實例可以作爲函數傳遞並使用相同的語法進行調用。所以不,函數指針不是函子。

我不知道「virtual functors」或「sibling functors」是什麼,所以我無法回答你的第二個問題。

+0

謝謝你的解釋 –