С++ 11 (и С++ 14) вводит дополнительные языковые конструкции и улучшения, которые нацелены на универсальное программирование. К ним относятся такие функции, как:
- Ссылки на R-значение
- Сбой ссылок
- Отличная переадресация
- Переместить семантику, вариативные шаблоны и многое другое
Я просматривал ранее проект спецификация С++ 14 (теперь с обновленным текстом) и код в примере в §20.5.1, целые последовательности времени компиляции, которые я нашел интересным и своеобразным.
template<class F, class Tuple, std::size_t... I>
decltype(auto) apply_impl(F&& f, Tuple&& t, index_sequence<I...>) {
return std::forward<F>(f)(std::get<I>(std::forward<Tuple>(t))...);
}
template<class F, class Tuple>
decltype(auto) apply(F&& f, Tuple&& t) {
using Indices = make_index_sequence<std::tuple_size<Tuple>::value>;
return apply_impl(std::forward<F>(f), std::forward<Tuple>(t), Indices());
}
Online здесь [intseq.general]/2.
Вопрос
- Почему была переадресована функция
f
вapply_impl
, т.е. почемуstd::forward<F>(f)(std::get...
? - Почему бы просто не применить функцию как
f(std::get...
?