C++ 遍历可变模板参数 iterate variadic template arguments


template<size_t I = 0, typename FuncT, typename ...Tp>
inline typename std::enable_if_t<I == sizeof ...(Tp)> for_each(std::tuple&, FuncT)
{
}

template<size_t I = 0, typename FuncT, typename ...Tp>
inline typename std::enable_if_t<I < sizeof ...(Tp)> for_each(std::tuple<Tp ...>& t, FuncT f)
{
    f(std::get(t));   
    for_each<I + 1, FuncT, Tp...>(t, f);
}

template<typename ...Args>
auto print(Args ...args)
{
    auto a = std::forward_as_tuple(args...);
    for_each(a, [](auto x)
    {
        std::cout << typeid(x).name() << ":" << x << std::endl;
    });
}

int main()
{
    print(10, 'c', "bbb", string("123"));
}

结果如下:

int:10

char:c

char const *:bbb

class std::basic_string, class std::allocator >:123
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 可变参数模板 原文链接: http://blog.csdn.net/xiaohu2022/article/deta...
    小白将阅读 5,101评论 0 8
  • 简述 可变参数模板(Variadic Template)是C++11引入的新特性,让模板编程更容易,且在运行时更少...
    Brent姜阅读 3,477评论 1 2
  • 我们在C语言编程中会遇到一些参数个数可变的函数,例如printf() 这个函数,它的定义是这样的: int pri...
    Mr_Me阅读 783评论 0 2
  • 1. 简介 在C语言中可以使用printf进行格式化输出,函数声明如下: 其中第一个参数format代表需要格式化...
    没事造轮子阅读 993评论 3 5
  • 和一老友聊天,初中同学,那个以前对我说以后和男生说话别再脸红的大小伙子要升级当爸爸了,恭喜恭喜! 感慨,时间"嘀嗒...
    齊影儿阅读 361评论 0 1