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