根据可调用可变参数元组中的函数结果创建元组

时间:2019-09-05 07:40:13

标签: c++ tuples variadic

我试图写以下内容:我有一个包含N个函数的元组作为输入。所有这些函数都可以具有不同的返回类型,但只能采用1个相同类型的参数。我想将每个函数调用到给定参数的结果放入一个元组。

template <typename AttributeType, typename ...Functions>
auto f(std::tuple<Functions...> &tupleOfFunctions, const AttributeType &attr)
{
  return std::make_tuple(std::get<0>(tupleOfFunctions)(attr), std::get<1>(tupleOfFunctions)(attr), …, std::get<N>(tupleOfFunctions)(attr));
}

1 个答案:

答案 0 :(得分:3)

去那里:

template <typename AttributeType, typename ...Functions>
auto f(std::tuple<Functions...> &tupleOfFunctions, const AttributeType &attr)
{
    return std::apply(
        [&](auto &... f) { return std::tuple{f(attr)...}; },
        tupleOfFunctions
    );
}

Live demo

也可以对此进行调整以透明地处理参考返回函数:

template <typename AttributeType, typename ...Functions>
auto f(std::tuple<Functions...> &tupleOfFunctions, const AttributeType &attr)
{
    return std::apply(
        [&](auto &... f) { return std::tuple<decltype(f(attr))...>{f(attr)...}; },
        //                                  ^^^^^^^^^^^^^^^^^^^^^^
        tupleOfFunctions
    );
}