Childpointers のキューを定義するインターフェイス クラスを作成しました。
class IChildQueue
{
public:
IChildQueue(void) {};
virtual ~IChildQueue(void) {};
public:
virtual bool add(ChildProcess *oChildProcess) = 0;
virtual void remove(ChildProcess *oChildProcess) = 0;
virtual void clear(void) = 0;
virtual unsigned int size(void) = 0;
virtual const IChildQueueIterator &begin(void) = 0; <-- this is the problem
};
ここで、クライアントがキュー自体をいじらずに子を反復処理できるように、イテレータをインターフェイスに追加したいと考えました.C++ に関する私の知識はそれほど良くないため、これを機能させることができませんでした。
私の目標は、for ループでイテレータを便利に使用できるようにすることでした。そのため、イテレータには自動保存期間があり、基になるオブジェクトのプロキシとして機能する必要があります。つまり、次のように:
for(Iterator it = master.begin(); it != it.end(); ++it)
it->childfunction(); <-- by overloading the -> operator.
いいえ、さまざまな理由でブーストを使用したくありません。
これまでのところ、私の Iterator は次のようになっています。
class IChildQueueIterator
{
public:
IChildQueueIterator(IChildQueue *pQueue);
virtual ~IChildQueueIterator() {};
virtual ChildProcess *operator->() const = 0;
virtual bool operator==(IChildQueueIterator const &lhs) = 0;
virtual bool operator!=(IChildQueueIterator const &lhs) = 0;
virtual ChildProcess &operator++() = 0;
virtual const ChildProcess operator++(int) = 0;
virtual bool end(void) = 0;
};
これが可能かどうかはわかりませんが、実際にそうである場合、少なくともその理由を知りたいです。