STL アルゴリズムのローカル クラス
C プログラミングの領域では、標準テンプレート ライブラリ (STL) が、データ構造の操作。ただし、STL アルゴリズム内の述語としてローカルに定義されたクラスを使用することに関して、一般的な疑問が生じます。
C 11 以前の標準における禁止
歴史的には、C 98 /03 標準では、STL アルゴリズムのテンプレート引数としてローカル型を使用することを明示的に禁止しました。この制限はローカル クラスにも拡張されました。例:
struct even : public std::unary_function<int,bool> { bool operator()(int x) { return !(x % 2); } }; std::remove_if(v.begin(), v.end(), even()); // error
標準によれば、「ローカル型、リンケージのない型、名前のない型、またはこれらの型のいずれかを複合した型は、テンプレートの type-parameter。"
制限の背後にある理論的根拠
この制限の元々の理論的根拠は不明です。これは、この言語の初期バージョンでのテンプレート メタプログラミングの実装に伴う潜在的な曖昧さまたは技術的制限が原因である可能性があります。
C 11 の緩和
幸いなことに、 C 11 標準ではこの制限が削除され、開発者がローカル クラスをテンプレート引数として使用できるようになりました。この変更により、STL アルゴリズムの表現力と柔軟性が大幅に強化されました。
実際のソリューション
実際には、最新のコンパイラのほとんどが STL アルゴリズムでのローカル クラスの使用をサポートするようになりました。たとえ基礎となる言語標準が明示的に許可していない場合でも。ただし、互換性を確保するには、使用している特定のコンパイラのドキュメントを確認することが重要です。
以上がSTL アルゴリズムの述語としてローカル クラスを使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。