zoukankan      html  css  js  c++  java
  • std::tuple作为参数invoke调用函数

    template<typename Function, typename Tuple, std::size_t... Index>
    decltype(auto) invoke_impl(Function&& func, Tuple&& t, std::index_sequence<Index...>)
    {
        return func(std::get<Index>(std::forward<Tuple>(t))...);
    }
    
    template<typename Function, typename Tuple>
    decltype(auto) invoke(Function&& func, Tuple&& t)
    {
        constexpr auto size = std::tuple_size<typename std::decay<Tuple>::type>::value;
        return invoke_impl(std::forward<Function>(func), std::forward<Tuple>(t), std::make_index_sequence<size>{});
    }
    
    
    

    使用:

    int add(int a, int b)
    {
        return a + b;
    }
    
    int main()
    {
        std::tuple<int, int> t = std::make_tuple(1, 2);
        std::cout << invoke(add, t) << std::endl;
        return 0;
    }
    
    

    这里用到了C++14的std::index_sequence,std::index_sequence很有用,它可以将std::array和std::tuple转换成序列。

  • 相关阅读:
    树莓派4B
    第一个实验-LED灯闪烁
    GPIO
    新建库函数模板
    开发环境搭建
    博弈论
    区间dp
    字典树
    快速排序
    MarkDown
  • 原文地址:https://www.cnblogs.com/highway-9/p/5956106.html
Copyright © 2011-2022 走看看