[英]Iterator Pattern - Circular Reference
Is there anyway to avoid this circular reference? 无论如何,有没有避免这种循环引用? I cant use foward declaration, because I am accessing methods of PositionBlock inside PositionBlockIterator...
我无法使用前向声明,因为我正在访问PositionBlockIterator中的PositionBlock方法...
I know that i can create an interface to PositionBlock, and then use it inside PositionBlockIterator (polymorphism). 我知道我可以创建一个与PositionBlock的接口,然后在PositionBlockIterator(多态性)中使用它。 But is there another way?
但是还有另一种方法吗?
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);
}
You can also see this compiling here . 您也可以在这里查看此编译。 I'd also recommend moving the implementations of the two functions into separate
*.cpp
files. 我还建议
*.cpp
两个功能的实现转移到单独的*.cpp
文件中。
A nested class should work in this situation (not tested). 嵌套类应在这种情况下工作(未经测试)。
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.