首頁 >後端開發 >C++ >本地類別可以用作 STL 演算法中的模板參數嗎?

本地類別可以用作 STL 演算法中的模板參數嗎?

DDD
DDD原創
2024-11-16 10:42:02945瀏覽

Can Local Classes Be Used as Template Arguments in STL Algorithms?

在 STL 演算法中使用本地定義的類別

在程式設計中,通常需要使用本地定義的類別作為 STL 演算法的謂詞。不幸的是,C 98/03 標準明確禁止這種做法,指出:

A local type, a type with no linkage, an unnamed type or a type compounded from any of these types shall not be used as a template-argument for a template type-parameter.

此限制在 C 標準的第 14.3.1 條中規定。

最初,此限制是許多程式設計師認為這是一個錯誤,如果標準發展得更快,就會更快得到修復。不過,C 11 取消了這個限制,允許將本地類型用作模板參數。

例如,以下程式碼以前在C 98/03 中無效,現在在C 11 中允許:

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() );
}

大多數現代編譯器允許使用本地類別作為模板參數,並提供對lambda 表達式的支持。

以上是本地類別可以用作 STL 演算法中的模板參數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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