有什么方法可以避免这种循环引用吗?我不能使用前向声明,因为我正在访问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);
}
}发布于 2014-07-04 09:39:57
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文件中。
发布于 2014-07-04 12:13:48
嵌套类应该在这种情况下工作(未经过测试)。
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);
}
};https://stackoverflow.com/questions/24565555
复制相似问题