首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代器模式-循环引用

迭代器模式-循环引用
EN

Stack Overflow用户
提问于 2014-07-04 09:35:26
回答 2查看 127关注 0票数 0

有什么方法可以避免这种循环引用吗?我不能使用前向声明,因为我正在访问PositionBlockIterator中的PositionBlock方法……

我知道我可以创建一个到PositionBlock的接口,然后在PositionBlockIterator中使用它(多态性)。但是有没有别的办法呢?

代码语言:javascript
复制
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);
   }
}
EN

回答 2

Stack Overflow用户

发布于 2014-07-04 09:39:57

代码语言:javascript
复制
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);
}

您还可以在编译here时看到这一点。我还建议将这两个函数的实现移到单独的*.cpp文件中。

票数 1
EN

Stack Overflow用户

发布于 2014-07-04 12:13:48

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

代码语言:javascript
复制
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);
  }
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24565555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档