C++14 make code cleaner

在C++11中我们如果要写一个通过tuple实现函数调用的函数要这样写:

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

    template<int N, int... Indexes>
    struct MakeIndexes : MakeIndexes<N - 1, N - 1, Indexes...>    {};

    template<int... indexes>
    struct MakeIndexes<0, indexes...>
    {
        typedef IndexTuple<indexes...> type;
    };

    template<typename F, int ... Indexes, typename ... Args>
    static void call_helper(F f, IndexTuple<Indexes...>, const std::tuple<Args...>& tup)
    {
        f(std::get<Indexes>(tup)...);
    }

    template<typename F, typename ... Args>
    static void call(F f, const std::tuple<Args...>& tp)
    {
        call_helper(f, typename MakeIndexes<sizeof... (Args)>::type(), tp);
    }

在C++14中MakeIndexes和IndexTuple已经由utility库提供了,我们可以写得更简洁了,两个函数就可以了。

    template<typename F, size_t... I, typename ... Args>
    static void call_helper(F f, std::index_sequence<I...>, const std::tuple<Args...>& tup)
    {
        f(std::get<I>(tup)...);
    }

    template<typename F, typename ... Args>
    static void call(F f, const std::tuple<Args...>& tp)
    {
        call_helper(f, std::make_index_sequence<sizeof... (Args)>(), tp);
    }

这样写更省心啦o(∩_∩)o 。

转载于:https://www.cnblogs.com/qicosmos/p/4916404.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值