首页  >  文章  >  后端开发  >  我可以在现代 C 中将本地类与 STL 算法一起使用吗?

我可以在现代 C 中将本地类与 STL 算法一起使用吗?

Susan Sarandon
Susan Sarandon原创
2024-11-23 10:17:12497浏览

Can I Use Local Classes with STL Algorithms in Modern C  ?

通过 STL 算法利用本地类

在探索 STL 算法的多方面性质时,您可能会质疑无法利用本地定义的类,因为这些算法中的谓词。此限制的起源在于 C 98/03 标准的范围内。

根据该标准的第 14.3.1 条,限制适用于用作模板参数的类型。这些限制包括禁止本地类型、缺乏链接的类型、未命名类型或从其任何组合派生的类型。

template <class T> class Y { /* ... */ };
void func() {
      struct S { /* ... */ }; //local class
      Y< S > y1; // error: local type used as template-argument
      Y< S* > y2; // error: pointer to local type used as template-argument
}

尽管是无意的,但由于标准演进速度缓慢,这一限制仍然存在。尽管如此,当代编译器接受了后来的 C 版本的进步,现在通常允许在算法中使用局部类型。

示例:

#include <vector>
#include <algorithm>

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()); // compiles successfully
   return 0;
}

在当前的C 环境下,在 STL 算法中使用本地定义的类型已成为一种常见的做法,同时引入 lambda 表达式,进一步增强了算法的性能灵活性。

以上是我可以在现代 C 中将本地类与 STL 算法一起使用吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

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