Создание C ++ лямбда по типу
Я хочу способ сделать функтор из функции. Теперь я пытаюсь обернуть вызов функции лямбда-функцией и создать ее позже. Но компилятор говорит, что лямбда-конструктор удален. Так есть ли способ скомпилировать этот код? Или может быть другой способ для этого?
#include <iostream>
void func()
{
std::cout << "Hello";
}
auto t = []{ func(); };
typedef decltype(t) functor_type;
template <class F>
void functor_caller()
{
F f;
f();
}
int main()
{
functor_caller<functor_type>();
return 0;
}
Теперь я получаю такую ошибку компилятора:
error: use of deleted function '<lambda()>::<lambda>()'
error: a lambda closure type has a deleted default constructor
На мой взгляд, единственный способ - использовать макрос:
#define WRAP_FUNC(f) \
struct f##_functor \
{ \
template <class... Args > \
auto operator()(Args ... args) ->decltype(f(args...)) \
{ \
return f(args...); \
} \
};
затем
WRAP_FUNC(func);
а затем (в основном)
functor_caller<func_functor>()