首页 >后端开发 >C++ >本地类可以用作 STL 算法中的模板参数吗?

本地类可以用作 STL 算法中的模板参数吗?

DDD
DDD原创
2024-11-16 10:42:02936浏览

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

大多数现代编译器允许使用本地类作为模板参数,并提供对 lambda 表达式的支持。

以上是本地类可以用作 STL 算法中的模板参数吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn