TGViewer
this->notes. this->notes. @thisnotes · 4.52K subscribers
Post #263 3.38K
#cpp

0. Я тут на днях увидел, что иногда форвардят не только какие-то аргументы при вызове operator() у функторов, но и и сами функторы. Пример из вероятной реализации std::apply:

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());
}


В apply_impl есть такая строчка:

return std::forward<F>(f)(std::get<I>(std::forward<Tuple>(t))...);

Зачем это делать для самого функтора?

Дело в том, что в пользовательском функторе operator() могут быть перегружены по категории значения:

operator()() & {…}
operator()() && {…}


И если вы не форвардите сам функтор, вы теряете его категорию значений, что может привести к вызову не той перегрузки.

1. Доклад Andrei Alexandrescu с CppCon 2023 про улучшение бинарного поиска и размышления про ChatGPT. Как обычно, очень харизматичный чувак. И, как обычно, хороший доклад.

2. Маленький пост про заблуждения в распределённых системах. В целом довольно очевидный, но от этого не менее полезный.
  • 👍 7
  • ❤ 1
More from @thisnotes
  1. Sep 17, 2026#common Сидите вы себе спокойно, разрабатываете поиск каких-нибудь объектов. Может это тов…
  2. Sep 9, 2026#cpp #books Да, книга 2001ого года. Мы ровесники. И да, в ней в основном обсуждаются какие…
  3. Sep 2, 2026#perf Попробовал собрать в кучку (кажется, немного сумбурно всё же) мысли по двум моментам…
  4. Aug 31, 2026Давайте новый тег заведём: #perf Во-первых, надо понять, что я вообще понимаю под перфом,…
  5. Aug 27, 2026#common Мы часто делаем системы, которые обладают какими-то ограничениями. Ограничения наш…
  6. Aug 24, 2026#list 0. [talk] Achieving Peak Performance for Matrix Multiplication in C++. Aliaksei Sala…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →