首页 > 后端开发 > C++ > 我可以在 STL 算法中使用局部类作为谓词吗?

我可以在 STL 算法中使用局部类作为谓词吗?

Mary-Kate Olsen
发布: 2024-11-16 10:58:03
原创
627 人浏览过

Can I Use Local Classes as Predicates in STL Algorithms?

STL 算法中的本地类

在 C 编程领域,标准模板库 (STL) 提供了一套全面的算法操作数据结构。然而,关于在 STL 算法中使用本地定义的类作为谓词,出现了一个常见问题。

Pre-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
登录后复制

根据标准,“本地类型、没有链接的类型、未命名类型或由任何这些类型复合的类型不得用作模板参数模板类型参数。”

限制背后的基本原理

此限制的原始原理尚不清楚。这可能是由于该语言的早期版本中模板元编程的实现存在潜在的歧义或技术限制。

C 11 中的放宽

幸运的是, C 11 标准取消了这一限制,允许开发人员使用本地类作为模板参数。这一变化极大地增强了 STL 算法的表现力和灵活性。

实践中的解决方案

实际上,大多数现代编译器现在都支持在 STL 算法中使用本地类,即使底层语言标准没有明确允许。但是,检查所使用的特定编译器的文档以确保兼容性非常重要。

以上是我可以在 STL 算法中使用局部类作为谓词吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板