探索C 中的Operator() 重載:函子和泛型程式設計
C 中重載() 運算符,如Boost 訊號中所示圖書館,提出了關於其目的和慣例的問題。讓我們深入探討這種做法背後的原因。
函子:橋接函數和物件世界
Operator() 重載在創建函子(一種獨特的構造)方面發揮著至關重要的作用它將類似函數的行為與狀態性結合。函子在呼叫之間保持其內部狀態,使它們能夠記住過去的操作。
函子範例
考慮以下累加器函子:
struct Accumulator { int counter = 0; int operator()(int i) { return counter += i; } };
一般程式設計:插入你的邏輯
函子在泛型程式設計中有著廣泛的應用,其中演算法使用使用者提供的函數或函子對一系列元素進行操作。這種靈活性在std::for_each 演算法中得到了證明:
template <typename InputIterator, typename Functor> void for_each(InputIterator first, InputIterator last, Functor f) { while (first != last) f(*first++); }
Operator() 的便利
operator() 重載允許函子和函數指標插入通用演算法。例如,考慮這個例子:
void print(int i) { std::cout << i << std::endl; } ... std::vector<int> vec; // Fill vec // Using a functor Accumulator acc; std::for_each(vec.begin(), vec.end(), acc); // acc.counter contains the vector sum // Using a function pointer std::for_each(vec.begin(), vec.end(), print); // prints all elements
多個() 運算子:一種可能性
與普遍的看法相反,確實可以重載多個() 運算符一次在一個班級。遵守方法重載規則,回傳類型必須不同。
以上是為什麼在 C 中重載 `operator()` ?函子和泛型程式的力量的詳細內容。更多資訊請關注PHP中文網其他相關文章!