ネストされたクラスとしていくつかのイテレータを持つコンテナクラスがあります。構造はこれに似たものです:
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;
}
しかし、それは私にコンパイルエラーを与えます:クラスグリッドはそれが宣言されているクラスと同じ名前を持っています。
前方宣言を#include"grid.h"に置き換えると機能します。しかし、私はどういうわけかそれは醜いと思います。
したがって、2つの作業オプションがあります。1つは私のIDEで醜いエラーを示し、もう1つはあまり好きではありません。
インクルードが囲んでいるクラス内にない他のバリエーションを試しましたが、さまざまな理由でコンパイルできませんでした。
だから私の質問は:「ベストプラクティス」や、それを囲むクラスファイル内に保持するには大きすぎるネストされたクラスを処理するためのパターンを含めることはありますか?
たとえば、次のようなネストされたクラスを宣言する方法があります。
class Grid::Iterator