其他分享
首页 > 其他分享> > c – 如何返回通用迭代器(独立于特定容器)?

c – 如何返回通用迭代器(独立于特定容器)?

作者:互联网

我想设计一个类Foo,它存储不同类型的各种数据,并通过它们返回迭代器.它应该是通用的,因此Foo的用户不知道数据是如何存储的(Foo可能使用std :: set或std :: vector或其他).

我很想写一个这样的界面:

class Foo {
  class FooImpl;
  FooImpl* impl_;
public:
  const Iterator<std::string>& GetStrings() const;
  const Iterator<int>& GetInts() const;
};

Iterator就像这样(就像.NET中的迭代器一样):

template<class T>
class Iterator {
public:
  const T& Value() const = 0;
  bool Done() const = 0;
  void Next() = 0;
};

但是我知道这种迭代器在C中不是标准的,并且最好像STL一样使用迭代器,所以你可以在它们上使用STL算法.

我怎样才能做到这一点? (我有机会需要iterator_traits吗?)

解决方法:

您是否理解为什么STL选择将迭代器实现细节放在头文件中? JIT框架能够跨编译单元内联,但C只能在编译单元中内联.内联时推进序列的速度要快得多,函数调用的成本实际上主要是遍历数据结构.

如果您真的想隐藏实现细节,请继续.您可以创建一个STL兼容的迭代器来实现运算符和运算符!=和operator->就受保护的虚拟功能而言,您提到的Next,Done和Value将是不错的名称.只希望以较低的性能为封装付费.

标签:pimpl-idiom,c,iterator,stl
来源: https://codeday.me/bug/20190827/1741535.html