ホームページ  >  記事  >  バックエンド開発  >  Modern C の STL アルゴリズムでローカル クラスを使用できますか?

Modern C の STL アルゴリズムでローカル クラスを使用できますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-23 10:17:12499ブラウズ

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 アルゴリズム内でローカルに定義された型の使用が一般的になってきており、アルゴリズムがさらに強化されています。柔軟性。

以上がModern C の STL アルゴリズムでローカル クラスを使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。