特定のクラスにイテレータを実装していますが、イテレータにはA
メンバーへのアクセスが必要であり、A
アクセスも必要ですiterator
-- 宣言できるようにしたいですA::iterator it;
クラスを他のクラスの中に単純にネストできることはわかっています。この場合、次のようになります。
class A {
public:
class iterator {
};
};
しかし、クラスA
とiterator
それ自体の両方に大量のコードが含まれているため、これらのクラスを 2 つの異なるファイルに分割したいと考えています。
ここでの問題は、適切なイテレータ演算子を実装するために、クラスA
が自然#include iterator.hpp
に を含むだけでなく、iterator
も含める必要があることです。A
インクルードガードを追加しても、これを機能させることができませんでした。
ここに私が持っているもののスニペットがあります:
a.hpp :
# include iterator.hpp
# ifndef A_HPP
# define A_HPP
template <typename T>
class A {
public:
typedef iterator<T> iterator;
};
iterator.hpp :
# include a.hpp
# ifndef ITERATOR_HPP
# define ITERATOR_HPP
template <typename T>
class iterator {
public:
// Constructor
iterator(A<T> *a) {
}
};
クラスはかなり大きいので、コード全体を投稿しませんでした
Obs : この再帰的な包含を実行することができない場合でも、クラスiterator
を の名前空間にネストすることはできますが、 class のA
外側で宣言することでA
十分です。