Как стать автором
Обновить

Комментарии 8

Скажите, почему вы объявляете Decorator как struct, в то время как фактически это namespace? Мне такие struct-ы попадаются в старом коде, вероятно, написанном до появления namespace (сейчас попробовал найти, когда это произошло, и не нашёл — как будто фича namespace в C++ была всегда). Или вы планируете добавить не-static содержимое, или защищаете Decorator от сторонних добавлений?
Изначально, в первой версии декоратора, у меня шаблонной была именно структура. А только потом я догадался, как можно лучше это сделать. Так что в принципе, вы действительно можете использоваться namespace или вообще сделать функцию свободной)
не стоит в лямбду захватывать ссылку
А как бы вы это сделали? [f = std::move(function)]?
template<typename Function>
static auto make(Function&& func)
{
  return[func = std::forward<Function>(func)](auto&&... args)
  {
    std::cout << "Do something" << std::endl;
    return std::invoke(func, std::forward<decltype(args)>(args)...);
  };
}

можно не переименовать, т.к. func слева от = в захвате относится к неймспейсу лямбды
Круто, спасибо за замечание и предложенное решение) У меня почему-то были ошибки компиляции, когда я пытался сделать decltype) Наверное, не там ставил троеточие)
Немного жести во второй статье — habr.com/ru/post/508828 ))
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации