c++ - 迭代器模式——循环引用

标签 c++ iterator circular-dependency

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

我知道我可以为 PositionBlock 创建一个接口(interface),然后在 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);
}

你也可以看到这个编译here .我还建议将这两个函数的实现移动到单独的 *.cpp 文件中。

关于c++ - 迭代器模式——循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24565555/

相关文章:

c++ - SDL_WM_SetCaption 不工作

C++ std::vector<>::iterator 不是指针,为什么?

java - 当 @Autowired 和 @Bean 出现在同一个类中时出现 BeanCurrentlyInCreationException

dependency-injection - Nest 无法解析 UserService (?, +) 的依赖关系。请确保索引 [0] 处的参数在当前上下文中可用

c++ - 数组初始化值太多

c++ - FreeType:如何栅格化非填充轮廓

c++ - 非平凡的复制构造函数有什么作用?

Python 重复集生成器

rust - 自定义迭代器中可变引用的生命周期参数问题

c++ - C++类之间的循环依赖