我正在阅读 C ++ primier 这个元组。 我完成测试程序后遇到了问题。这是代码:
#include <tuple>
#include <iostream>
using namespace std;
tuple<int, bool, double> tuple1;
int main() {
tuple1 = make_tuple<int, bool, double>(1,true,3.3);
for (int i = 0; i <tuple_size<decltype(tuple1)>::value; i++)
{
cout << get<i>(tuple1) << endl;
}
}
但是get<i>
函数不起作用,因为i
是非常量的。我该怎么做
i
const?或者有更简单的方法让get<...>
功能正常工作吗?
感谢@ R Sahu 获取答案,感谢@ Praetorian 链接到重复的问题。现在我知道解决这个问题并不容易。
但现在我想知道为什么在c ++ 11中没有简单的方法呢?谢谢。
答案 0 :(得分:2)
您可以使用模板来模拟for
循环。
#include <iostream>
#include <tuple>
template <size_t N> struct Printer
{
template <typename ... Args>
static void print(std::tuple<Args ...> const& tuple)
{
Printer<N-1>::print(tuple);
std::cout << std::get<N-1>(tuple) << std::endl;
}
};
// Terminating specialization.
template <> struct Printer<0>
{
template <typename ... Args>
static void print(std::tuple<Args ...> const& tuple)
{
// Nothing to be done here.
}
};
template <typename ... Args>
void printTuple(std::tuple<Args ...> const& tuple)
{
Printer<std::tuple_size<std::tuple<Args ...>>::value>::print(tuple);
}
int main()
{
std::tuple<int, bool, double> tuple1;
tuple1 = std::make_tuple<int, bool, double>(1,true,3.3);
printTuple(tuple1);
}
输出:
1
1
3.3