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