1

私はdiagonal主な対角線として機能するクラスを持っています。の{begin: point, size: int}リストを保存する代わりに、保存しているスペースを最小限に抑えるためにpoint

対角線を反復可能にすることができれば、私のアルゴリズムは簡単に実装できます。だから私は1つ書いたpoint_iterator

class point_iterator{
  friend class diagonal;
  const diagonal& _diagonal;
  size_t    _position;
  public:
    typedef point_iterator self_type;
    typedef point value_type;
    typedef point reference;//< returning value instead of reference
    typedef boost::shared_ptr<point> pointer;//< it can never return pointer
    typedef std::random_access_iterator_tag iterator_category;
    typedef boost::int32_t difference_type;
  public:
    pointer operator->(){return pointer(new point(_diagonal.at(_position)));}
    point operator*(){return _diagonal.at(_position);}

pointコンテナーのどこにも格納されていないため、イテレーターを介して参照またはポインターを返すことはできません。したがって、すべての場合において、ポイント (コピー可能) オブジェクトを作成して返す必要があります。

したがって、私の参照 typedef は実際には参照ではありません。これでいいですか?

オブジェクトoperator->()を返すものを実装できません。ポインタまたはポインタのようなものを返す必要があります。ユーザーがそれらを削除する必要があるため、私はただ戻ることはできません。だから私は代わりに使用しています。これでいいですか?pointpoint*new point(operator*())shared_ptr

unique_ptrC++11なので使えませんでした。scoped_ptrコピー不可です。

4

1 に答える 1