从可调用可变元组中的函数结果创建元组
Create tuple from result of functions in callable variadic tuple
我正在尝试编写以下内容:我有一个包含 N 个函数的元组作为输入。所有这些函数都可以有不同的 return 类型,但只接受 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));
}
好了:
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
);
}
这也可以调整为透明地处理引用返回函数:
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
);
}
我正在尝试编写以下内容:我有一个包含 N 个函数的元组作为输入。所有这些函数都可以有不同的 return 类型,但只接受 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));
}
好了:
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
);
}
这也可以调整为透明地处理引用返回函数:
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
);
}