STL アルゴリズムの述語としてローカル クラスを使用できますか?

Mary-Kate Olsen
リリース: 2024-11-16 10:58:03
オリジナル
500 人が閲覧しました

Can I Use Local Classes as Predicates in STL Algorithms?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート