1

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;
};

これが可能かどうかはわかりませんが、実際にそうである場合、少なくともその理由を知りたいです。

4

0 に答える 0