2011-07-31 7 views
5

標準N3291を見ると、tuplebegin()end()をサポートするリファレンスが見つかりませんでした。しかし、何年も前から私のメモを見ると、私はそれを後で調べる必要があると書き留めたようです。そしてここにいるのです。C++ 0xタプルにイテレータはありません。

現在のC++ 0x標準でtuple<...>.begin()またはtuple<...>.end()のトレースが見つかりませんでした。これは正しいですか?その反復子を持つタプルをアルゴリズムに渡すことはできませんし、どちらも反復することはできません。 auto何をする必要がありますので、もちろんナンセンスである

tuple<int,string,double> val; 
for(auto a : val) cerr << val;  // very wrong! 

私のメモにエラーがあり、タプル要素のイテレータを取得する方法がないという確認が必要です。あるいは、標準の議論に放棄された道があったのでしょうか?

注:私は実装するTMPまたは可変個引数テンプレートを使用することができます1つを認識していため、すべての要素の - タプルんが、私の質問は、イテレータについて実際にあります。

+0

0から ':: tuple_size'までのインデックスを持ち、' ​​std :: get 'を介して要素にアクセスするのはなぜですか? – osgx

+4

@osgx:テンプレートパラメータはコンパイル時定数でなければなりません! –

+0

この質問とその回答を確認してくださいhttp://stackoverflow.com/q/1198260/196561 – osgx

答えて

1

いいえ、タプルのイテレータはありません。イテレータは実行時コンセプトですが、タプルはコンパイル時のコンストラクタです。あなたが正しく言及したように、ジェネリックタプルイテレータを理解する方法さえありません。

タイプ消去の実行時コンテナが必要な場合は、boost::anyのベクトルを使用できます。

+1

Nono、私はちょうど私のメモを理解したかった。 – towi

4

タプルのイテレータは、クラスメンバのイテレータほど有用です。タプルはそのような種類のコンテンツを持つことを意味するものではありません。

+3

それは良い比較です。しかし、私は確信していますが、多くのリフレクションファン(読者:Javaファン)は、クラスメンバーのイテレーターが非常に有用であることを発見しました... ;-) – towi

+1

@towi、oops :)それはその用途があります。 – progo

関連する問題