方式一:递归 + 类模板特化方式

template<typename Tuple, std::size_t N>
struct tuple_printer
{
static void print(const Tuple& t)
{
tuple_printer<Tuple, N - 1>::print(t);
std::cout << ", " << std::get<N - 1>(t);
}
}; template<typename Tuple>
struct tuple_printer<Tuple, 1>
{
static void print(const Tuple& t)
{
std::cout << std::get<0>(t);
}
}; template<typename... Args>
void print_tuple(const std::tuple<Args...>& t)
{
tuple_printer<decltype(t), sizeof...(Args)>::print(t);
std::cout << std::endl;
}

方式二:重载<<操作符 + 使用C++14的std::index_senquence

template<typename Char, typename Traits, typename Tuple, std::size_t... Index>
void print_tuple_impl(std::basic_ostream<Char, Traits>& os, const Tuple& t, std::index_sequence<Index...>)
{
using swallow = int[]; // guaranties left to right order
(void)swallow { 0, (void(os << (Index == 0 ? "" : ", ") << std::get<Index>(t)), 0)... };
} template<typename Char, typename Traits, typename... Args>
decltype(auto) operator<<(std::basic_ostream<Char, Traits>& os, const std::tuple<Args...>& t)
{
os << "(";
print_tuple_impl(os, t, std::index_sequence_for<Args...>{});
return os << ")";
}

使用:

std::tuple<int, short, double, char> tp = std::make_tuple(1, 2, 3, 'a');
// 使用方式一
print_tuple(tp);
// 使用方式二
std::cout << tp << std::endl;

打印std::tuple的N总方式的更多相关文章

  1. 遍历输出tuple元素的简洁方式(C++11)

    //遍历输出tuple元素的简洁方式(C++11) //Win32Con17_VS2017_01.cpp #include <iostream> #include <tuple> ...

  2. c++之元组std::tuple常见用法

    元组,c++11中引入的新的类型,可类比std::pair. 但是std::pair只能支持两个元素. 理论上, 元组支持0~任意个元素. 本文演示环境: VS2015 up3 0.头文件 #incl ...

  3. std::tuple作为参数invoke调用函数

    template<typename Function, typename Tuple, std::size_t... Index> decltype(auto) invoke_impl(F ...

  4. 将std::array转换成std::tuple

    template<typename Array, std::size_t... Index> decltype(auto) array2tuple_impl(const Array& ...

  5. std::tuple

    tuple,元组类型.头文件<tuple>,tuple是一个固定大小的不同类型(异质,heterogeneous)值的集合(这一点是tuple与其他常规STL容器的最大不同,即它可以同时存 ...

  6. 五分钟学Java:打印Java数组最优雅的方式是什么?

    在逛 Stack Overflow 的时候,发现了一些访问量像‎安第斯山一样高的问题,比如说这个:打印 Java 数组最优雅的方式是什么?访问量足足有 220W+,想不到啊,这么简单的问题竟然有这么多 ...

  7. ffmpeg、数字音频教程、JUCE、std::tuple

    下载网易云音乐的视频 https://yunyinyue.iiilab.com/ 模板教程: https://github.com/wuye9036/CppTemplateTutorial/blob/ ...

  8. 1.4socket服务器打印信息的四种不同方式()

    方式一 socker 服务器 # -*- coding: utf-8 -*- import sys,os,multiprocessing from socket import * serverHost ...

  9. VC、IE、ASP环境下打印、预备的完美解决方式

    一种基于XML的报表开发工具,它支持从设计报表.调用API打印.预览,能支持分布式报表.方便报表的存储.转发. 在报表中能嵌入VBScript,能方便地訪问VB,VC的变量,能訪问COM组件.ADO等 ...

随机推荐

  1. 第十一篇:Linux中权限的再讨论( 下 )

    前言 上篇随笔讲述了Linux中权限的大致实现机制以及目录权限的相关规则.本文将讲解Linux中的三种特殊权限:SUID,SGID,Sticky权限. 看完这两篇文章,你一定会对Linux的权限有个更 ...

  2. 第一次广搜!HDU1548--A Strange Lift

    一上来看见题目就用了深搜(因为只会深搜)果断内存超限(据说时间也会超限)无奈只好开始用广搜 其实广搜的思路和深搜有很多类似的地方 不过实现的过程中用到了队列 因此有点难以理解(好吧我个人认为) 这题是 ...

  3. Android 调用系统相机拍照保存以及调用系统相册的方法

    系统已经有的东西,如果我们没有新的需求的话,直接调用是最直接的.下面讲讲调用系统相机拍照并保存图片和如何调用系统相册的方法. 首先看看调用系统相机的核心方法: Intent camera = new ...

  4. maven仓库加载本地包依赖

    如果有个jar包是我们自己打的,怎么放到maven中呢? 首先在项目里面新建一个lib目录,如果有lib目录则不需要新建,然后放自己的jar包进去,maven的pom.xml配置是: <depe ...

  5. Sonnet-十四行诗

    <Wish> Of our best wishes we could desire increase, That thereby rose's aroma might never die, ...

  6. Tortoise SVN 使用

    1.添加文件或文件夹 2.删除文件或文件夹 ①If you want to delete an item from the repository, but keep it locally as an ...

  7. datetime 模块详解 -- 基本的日期和时间类型

    转自:https://www.cnblogs.com/fclbky/articles/4098204.html datetime 模块提供了各种类用于操作日期和时间,该模块侧重于高效率的格式化输出 在 ...

  8. centos下vsftpd不能显示文件,不能创建文件及文件夹

    centos下vsftpd登录正常,但不能显示文件,不能创建文件及文件夹 这是由于selinux的机制 通过命令 [root@localhost www]# getsebool -a|grep ftp ...

  9. Storm-wordcount实时统计单词次数

    一.本地模式 1.WordCountSpout类 package com.demo.wc; import java.util.Map; import org.apache.storm.spout.Sp ...

  10. RESTful HTTP的实践(转)

    add by zhj: 文章有点老了,2009年的,到现在已经六年了,不过还是很有参考价值的. 另外,吐槽一下PUT method,竟然允许用户用实例号来创建,靠,这也行,实例号还是后台来定义比较方便 ...