包括嵌套类

tho*_*ler 1 c++ nested-class

我有一个带有几个迭代器的容器类作为嵌套类.结构是这样的:

class Grid
{
protected:
    class Iterator
    {
        Iterator(Grid* g) : grid(g){}
        Grid* grid;
    }
    class MoreIterator : public Iterator
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想将迭代器移动到自己的头文件中,以清理容器代码.

class Grid
{
protected:
#include "griditerators.h"
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这编译没有错误.但:

在QtCreator中排队

Iterator(Grid* g) : grid(g){}
Grid* grid;
Run Code Online (Sandbox Code Playgroud)

被标记为错误,告诉我"网格不是类型名称".

我以为我可以通过griditerator.h文件中的前向声明来解决这个问题:

class Grid;
class Iterator
{
    Iterator(Grid* g) : grid(g){}
    Grid* grid;
}
Run Code Online (Sandbox Code Playgroud)

但这给了我一个编译错误:类Grid与声明它的类具有相同的名称.

用#include"grid.h"替换前向声明.但我不知何故认为这很难看.

所以我有两个工作选择.一个显示我的IDE中的丑陋错误,另一个我不喜欢那么多.

我尝试了其他变体,其中include不在封闭类中,但由于不同的原因而无法编译.

所以我的问题是:是否有任何"最佳实践"或包含模式来处理太大而无法将它们保存在封闭类文件中的嵌套类?

例如,有没有办法声明一个嵌套类,如:

class Grid::Iterator
Run Code Online (Sandbox Code Playgroud)

Fre*_*man 7

不要将嵌套类声明放在单独的头文件中.这是糟糕的设计,会让任何需要维护代码的人感到困惑.如果嵌套类太大,则将其删除并将其放入其自己的编译单元(h/cpp组合)中.