查看标准N3291我找不到tuple
支持begin()
和end()
的任何引用。但是当我多年前看到我的笔记时,我似乎已经记下了我需要稍后再研究一下。我们来了。
我在当前的C ++ 0x标准中找不到tuple<...>.begin()
或tuple<...>.end()
的任何痕迹,这是正确的吗?不可能将带有迭代器的元组传递给算法,也不能将for
- 循环遍历它,对吗?
tuple<int,string,double> val;
for(auto a : val) cerr << val; // very wrong!
这当然是胡说八道,因为auto
应该是什么?
我需要确认我的笔记包含错误,并且没有办法获取元组元素的迭代器。或者标准讨论中可能有一条废弃的道路?
注意:我知道可以使用 TMP 或 Variadic模板来实现 do-for-all-element-of-a-tuple ,但我的问题实际上是关于迭代器。
答案 0 :(得分:7)
Boost。Fusion包含可迭代的元组 - boost::fusion::vector<>
- 以及许多iteration, query, and transformation algorithms元组。
它还有代码adapt boost::tuple<>
for use with those iterators and algorithms;您可以使用该代码并将其修改为与std::tuple<>
配合使用。
答案 1 :(得分:3)
元组的迭代器与类成员的迭代器一样有用。元组并不意味着具有那种可迭代的内容。
答案 2 :(得分:1)
不,元组没有迭代器。迭代器是一个运行时概念,而元组是一个编译时构造。正如你正确地指出的那样,甚至没有办法理解通用元组迭代器。
如果需要类型擦除运行时容器,可以使用boost::any
s的向量。