2011-10-21 13 views
2

合成データにイテレータをboost::iterator_facade<>で作成しています。データは、ハンドル上の関数を呼び出すことによってのみアクセスできます。ハンドルはMyHandleにラップされています。私はValueReferenceテンプレートパラメータの両方にMyHandleを使用する必要があることを認識しました。だから、イテレータ宣言は次のようになります。合成データのイテレータを作成する方法は?

class MyIterator 
    : public boost::iterator_facade< 
     MyIterator 
     , MyHandle 
     , boost::forward_traversal_tag 
     , MyHandle 
    > 

これはこの種のものを行うにはどのように唯一の方法ですか?あるいは、合成データ用のイテレータを作成する方法があるのでしょうか?また、boost::forward_traversal_tagは、コードで別のイテレータタグを使用すると、データの人為性がうまく伝わらないようです。

答えて

2

boost::function_input_iteratorは、イテレータでジェネレータ関数をラップします。イテレータを間接参照すると、関数を呼び出し、その結果を返します:

はまあは、データを構造化されている

http://www.boost.org/doc/libs/1_47_0/libs/iterator/doc/function_input_iterator.html

+0

、そう簡単な関数はしないだろう。 – wilx

+0

「シンプルファンクション」と言うと、「コール間に状態が続くファンクション」を意味しますか?これはバリアではありません。なぜなら、関数呼び出し演算子を定義するステートフルな構造体を含む、呼び出し可能なオブジェクトでfunction_input_iteratorを構築できるからです。 – gred

関連する問題