输出任意一个tuple的元素

来源:互联网 发布:网络英语教程 编辑:程序博客网 时间:2024/06/05 17:04
运用C++11中的variadic template我们可以实现输出任意一个tuple元素
代码如下:

#include <iostream>
#include <tuple>
#include <stdio.h>

template <int... >
struct seq {};

template <int N, int... S>
struct genseq : genseq<N - 1, N - 1,S...>
{

};

template <int... S>
struct genseq<0, S...>
{
    typedefseq<S...> type;
};

void show()
{
    std::cout<< std::endl;
}

template <typename T, typename...TRest>
void show(const T& item, constTRest&... rest)
{
    std::cout<< item<< ", ";
    show(rest...);
}


template <typename... T, int...S>
voidunpack_tuple(std::tuple<T...>&tp, seq<S...>sq)
{
   show(std::get<S>(tp)...);
}

template <typename... T>
voidprint_tuple(std::tuple<T...>&tp)
{
    unpack_tuple(tp,typenamegenseq<sizeof...(T)>::type());
}

int main()
{
   std::tuple<int, double, char> tp{123,456.789, 'c'};
   std::tuple<char *, float,std::string> tp1{"test for print tuple", 123.456789," successfully! :)"};
    print_tuple(tp);
    print_tuple(tp1);
    return 0;
}

原创粉丝点击