我知道您正在寻找与 VS2012 兼容的答案,但无论如何我都会发布此解决方案,以防您碰巧能够升级编译器以获得某些 C++14 支持。
如果你发现一个毛茸茸的 C++03/C++11 解决方法,那么你总是可以将它与这个 C++14 代码进行比较 :)
可以扩展元组的参数并使用 C++14 将它们传递给指定的函数std::integer_sequence
。
template <typename Func, typename Tuple, std::size_t... Indices>
auto forward_to_function(Func&& f, Tuple&& t, std::index_sequence<Indices...>) {
return f(std::get<Indices>(std::forward<Tuple>(t))...);
}
template <typename Func, typename Tuple>
auto forward_to_function(Func&& f, Tuple&& t) {
constexpr auto n = std::tuple_size<std::remove_reference_t<Tuple>>::value;
return forward_to_function(std::forward<Func>(f),
std::forward<Tuple>(t),
std::make_index_sequence<n>{});
}
活生生的例子