透過STL 演算法利用本地類別
在探索STL 演算法的多面向性質時,您可能會質疑無法利用本地定義的類,因為這些演算法中的謂詞。此限制的起源在於 C 98/03 標準的範圍內。
根據該標準的第 14.3.1 條,限制適用於用作模板參數的類型。這些限制包括禁止本地類型、缺乏連結的類型、未命名類型或由其任何組合派生的類型。
template <class T> class Y { /* ... */ }; void func() { struct S { /* ... */ }; //local class Y< S > y1; // error: local type used as template-argument Y< S* > y2; // error: pointer to local type used as template-argument }
儘管是無意的,但由於標準演進速度緩慢,這一限制仍然存在。儘管如此,當代編譯器接受了後來的 C 版本的進步,現在通常允許在演算法中使用局部類型。
範例:
#include <vector> #include <algorithm> int main() { int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; std::vector<int> v(array, array + 10); struct even : public std::unary_function<int, bool> { bool operator()(int x) { return !(x % 2); } }; std::remove_if(v.begin(), v.end(), even()); // compiles successfully return 0; }
在目前的C 環境下,在STL 演算法中使用本地定義的類型已成為一種常見的做法,同時引入lambda表達式,進一步增強了演算法的效能靈活性。
以上是我可以在現代 C 中將本地類別與 STL 演算法一起使用嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!