我希望有一种方法可以从函数中创建函数对象。现在,我尝试通过 lambda 函数来封装函数调用,并稍后实例化它。但编译器说 lambda 构造函数被删除了。 那么,有没有办法编译这段代码?或者还有其他方法吗?
#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>()
main
函数中声明一个functor_type
类型的变量。需要先解决这个问题。 - jxhF f(t);
吗?目前,functor_caller
不知道t
。 - MSalters