首頁 >後端開發 >C++ >我可以在現代 C 中將本地類別與 STL 演算法一起使用嗎?

我可以在現代 C 中將本地類別與 STL 演算法一起使用嗎?

Susan Sarandon
Susan Sarandon原創
2024-11-23 10:17:12568瀏覽

Can I Use Local Classes with STL Algorithms in Modern C  ?

透過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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn