从C#到C++的产量,处理容器

And*_*res 1 c++ oop containers stl

实际上,我在这里有一个设计问题.它非常简单但重点是:

我有一个C++类,其STL向量被声明为私有成员.但是该类的客户端需要遍历此向量.

在C#中,我们有一个非常方便的声明,产量,在这样的情况下,你写一个函数返回一个IEnumerable,它"产量"你一个很好的方式来遍历这个类内部的专用容器.

我只是想为C++找到一个优雅的解决方案,而不是使用像GetValue(int idx)这样的方法.

有什么建议?

例:

class Fat
{
   public:
      Fat();
   // some code here ...

   private:
      void LoadSectors(SECT startPoint);
      std::vector<SECT>sectors;

};

class Storage
{
   public:
      Storage(string CompoundFile);

      //For example, this method will receive a ref to my fat system and iterate over
      //the fat array in order to read every sector. 
      LoadStrem(Fat& fat);

};
Run Code Online (Sandbox Code Playgroud)

这是一个很简单的例子.

Pav*_*aev 6

C++中没有与yieldC#类似的语法糖.如果你想创建一个类,它的实例应该以同样的方式股票STL集合是可迭代的,那么你必须为实现您的类的迭代器,公开为::iterator你的类型,并提供begin()end()成员函数.

  • 向量已经实现了一个迭代器.你可以做`typedef vector <SECT> :: const_iterator const_iterator;`和(也许)`typedef vector <SECT> :: iterator iterator;` (2认同)