如何在C ++ 11中添加const来获取元组的<>(t)函数?

时间:2015-06-03 19:32:32

标签: c++ c++11 tuples

我正在阅读 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中没有简单的方法呢?谢谢。

1 个答案:

答案 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