繁体   English   中英

迭代器模式-循环引用

[英]Iterator Pattern - Circular Reference

无论如何,有没有避免这种循环引用? 我无法使用前向声明,因为我正在访问PositionBlockIterator中的PositionBlock方法...

我知道我可以创建一个与PositionBlock的接口,然后在PositionBlockIterator(多态性)中使用它。 但是还有另一种方法吗?

class PositionBlockIterator{
private:
   PositionBlock *posBlock;
public:
     PositionBlockIterator(PositionBlock *posBlock_){
         posBlock = posBlock_;
     }
     /* functions to iterate over positionblock, using posBlock->... */
}

class PositionBlock
{
public:
   PositionBlockIterator * createIterator(){
       return PositionBlockIterator(this);
   }
}
class PositionBlock;
class PositionBlockIterator;

class PositionBlockIterator{
    private:
        PositionBlock *posBlock;

    public:
        PositionBlockIterator(PositionBlock *posBlock_);
};

class PositionBlock {
    public:
        PositionBlockIterator * createIterator();
};

PositionBlockIterator::PositionBlockIterator(PositionBlock *posBlock_) {
    posBlock = posBlock_;
}

PositionBlockIterator * PositionBlock::createIterator(){
    return new PositionBlockIterator(this);
}

您也可以在这里查看此编译。 我还建议*.cpp两个功能的实现转移到单独的*.cpp文件中。

嵌套类应在这种情况下工作(未经测试)。

class PositionBlock{
public:
  class Iterator{
  private:
     PositionBlock *posBlock;
  public:
    Iterator(PositionBlock *posBlock_){
       posBlock = posBlock_;
    }
    /* functions to iterate over positionblock, using posBlock->... */
  };

  Iterator * createIterator(){
     return new Iterator(this);
  }
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM