我最近對函子感到興奮,並且一直在使用它們。然後出現這種情況,我需要我的仿函數來執行兩個不同的操作,並且我想添加另一個方法到我的仿函數(而不是重載()運算符)。不管這是不是好的做法,我不確定(也許你可以告訴我),但它讓我想到了爲什麼我首先使用函子而不僅僅是物體。所以我的問題是:爲什麼C++函數對於具有命名方法的對象更可取?
重載()運算符有什麼特殊之處,或者它比使用正常的命名方法稍微有語法吸引力嗎?
更新:
首先,我知道爲什麼函子可優選作爲在其他問題解釋函數指針。我想知道爲什麼他們可以比使用命名方法的對象更可取。其次,關於何時我想要使用函數的另一個可能命名方法的示例:基本上我有兩個函數,一個用於計算稱爲圖分區的模塊性的東西 - compute_modularity()
,另一個用於計算增益在分區compute_modularity_gain()
的一些改變之後以模塊化。我認爲我可以將這些函數作爲相同仿函數的一部分傳遞給優化算法,並將增益作爲命名函數。我不只是將兩個函子傳遞給算法,是因爲我想強制compute_modularity_gain()
僅與compute_modularity()
結合使用,而不是另一個函數,例如compute_stability()
(應該僅compute_stability_gain()
使用。換句話說,增益功能必須緊密結合與其兄弟的功能。如果有另一種方式我可以強制執行此約束,那麼請讓我知道。
描述使您希望添加其他方法的場景。 – 2011-04-05 00:45:59
這似乎已被覆蓋:[C++ Functors - 及其使用。](http://stackoverflow.com/q/356950/478288) – chrisaycock 2011-04-05 00:46:19
@chrisaycock:你應該只投票關閉*確切*重複。這個問題是相似的,但有一個質的不同方面:爲什麼不能使用正常的命名方法來實現函數,爲什麼他們只能實現一種方法? – 2011-04-05 00:52:13