[英]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.