ホームページ >バックエンド開発 >C++ >ローカル クラスは STL アルゴリズムのテンプレート引数として使用できますか?

ローカル クラスは STL アルゴリズムのテンプレート引数として使用できますか?

DDD
DDDオリジナル
2024-11-16 10:42:02941ブラウズ

Can Local Classes Be Used as Template Arguments in STL Algorithms?

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() );
}

ほとんどの最新のコンパイラでは、ラムダ式のサポートに加えて、ローカル クラスをテンプレート引数として使用できます。

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

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