我有一个包含多个迭代器作为嵌套类的容器类。结构是这样的:
class Grid
{
protected:
class Iterator
{
Iterator(Grid* g) : grid(g){}
Grid* grid;
}
class MoreIterator : public Iterator
{
}
}
现在我想将迭代器移动到它们自己的头文件中,以清理容器代码。
class Grid
{
protected:
#include "griditerators.h"
}
到目前为止,这编译没有错误。但:
在 QtCreator 中的行
Iterator(Grid* g) : grid(g){}
Grid* grid;
被标记为错误,告诉我“网格不是类型名称”。
我想我可以通过 griditerator.h 文件中的前向声明来解决这个问题:
class Grid;
class Iterator
{
Iterator(Grid* g) : grid(g){}
Grid* grid;
}
但这给了我一个编译错误:类 Grid 与声明它的类同名。
用#include "grid.h" 替换前向声明是可行的。但不知何故,我认为这很丑陋。
所以我有两个工作选择。一个在我的 IDE 中显示了丑陋的错误,另一个我就是不太喜欢。
我尝试了其他变体,其中包含不在封闭类中,但由于不同的原因未能编译。
所以我的问题是:是否有任何“最佳实践”或包含模式来处理嵌套类太大而无法将它们保留在其封闭类文件中?
例如,是否有一种方法可以声明一个嵌套类,例如:
class Grid::Iterator