2011-07-31 48 views
5

縱觀標準N3291,我沒有找到tuple的支持begin()end()的任何參考。但是當我從幾年前看到我的筆記時,我似乎已經記下了,我需要稍後再研究。在這裏,我們是。C++ 0x元組沒有迭代器,對吧?

我在當前的C++ 0x標準中找不到tuple<...>.begin()tuple<...>.end()的任何痕跡,這是正確的嗎?不可能將其迭代器的元組傳遞給一個算法,也不能將一個for環回它,對吧?

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

這當然是無稽之談,因爲auto應該是什麼?

我需要確認我的筆記包含錯誤,並且沒有辦法爲元組元素獲取這些迭代器。或者也許在標準討論中有一條被遺棄的道路?

注:我知道一個可以使用TMP可變參數模板實施做參加的所有元素對的一元組,但我的問題實際上是關於迭代器。

+0

爲什麼不用索引從0到':: tuple_size'循環並通過'std :: get '訪問元素? – osgx

+4

@osgx:模板參數必須是編譯時常量! –

+0

檢查此問題及其答案http://stackoverflow.com/q/1198260/196561 – osgx

回答

1

不,沒有元組的迭代器。迭代器是一個運行時概念,而元組是編譯時構造。正如你正確地指出的那樣,甚至沒有辦法理解通用的元組迭代器。

如果您需要刪除類型的運行時容器,則可以使用boost::any s的矢量。

+1

諾諾,我只是想理解我的筆記。 – towi

4

元組的迭代器和類成員的迭代器一樣有用。元組並不意味着有那種可迭代的內容。

+3

這是一個很好的比較。雖然,我確信,許多反思粉絲(閱讀:Java粉絲)發現類成員的迭代器相當有用... ;-) – towi

+1

@towi,oops :)它在那裏有它的用處。 – progo