特定のクラスにイテレータを実装していますが、イテレータには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十分です。