在 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中文网其他相关文章!