Re[4]: Получить сигнатуру из ламбды
От: rg45 СССР  
Дата: 19.08.20 15:42
Оценка: 4 (1)
Здравствуйте, Went, Вы писали:

W>Запустить "как есть" его не получится (call_traits и call_elements), но, может, будут какие-то замечания просто при взгляде на него?


Вот тебе еще один вариант. В точности в твоей постановке, но гораздо проще в реализации, без туплов и всяких мета-чудес:

http://coliru.stacked-crooked.com/a/3f41b4c768c465c2

#include <iostream>
#include <functional>

namespace md {

void add_to_queue(const std::function<void()>& fnc)
{
  fnc(); // Для проверки просто вызываем
}

template<typename F>
struct defer_proxy
{
  template<typename... Args>
  void operator()(Args&&... args) const
  {
    auto&& fn_ = fn;
    add_to_queue([=](){fn_(args...);}); // call_elements = std::apply
  } 
  F fn;
};


template<typename F>
defer_proxy<F> defer(const F& fn)
{
  return {fn};
}

} // md

int main(int argc, char * argv[])
{
  auto x = [](int i, float f)
  {
    std::cout << i << " " << f << std::endl;
  };
  md::defer(x)(1, 1.0f);

  std::function<void(int, float)> y = x;
  md::defer(y)(2, 2.0f);
}
--
Отредактировано 19.08.2020 15:48 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.