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