有没有办法避免这种循环引用?我不能使用前向声明,因为我正在 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/