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 アルゴリズム内でローカルに定義された型の使用が一般的になってきており、アルゴリズムがさらに強化されています。柔軟性。
以上がModern C の STL アルゴリズムでローカル クラスを使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。