c++中从Lambda函数生成Functor
Make Functor from a Lambda Function in C++
是否可以在c++中从lambda函数创建一个函子?
如果没有,为什么没有?
这给我带来了一点意想不到的麻烦。
实际用例:
另一个函数需要像这样创建函子:
Class::OnCallBack::MakeFunctor(this, &thisclass::function);
通常为了使用这个,我必须在thisclass
中创建一个函数,这意味着添加到头文件中。经过多次使用后,会有一些膨胀。我想通过以下方式来避免这种臃肿:
Class::OnCallBack::MakeFunctor(this,
void callback()
{ []() { dosomething; } });
出错的是编译错误。即使它可以编译,是否有可能做这样的事情?
如果你想存储lambda函数你可以像这样存储void()
函数
std::function< void() > callback = [](){ dosomething };
或者,对于具有返回类型和形参的函数,
std::function< int( int ) > callback = []( int i ){ return dosomething(i);}
你需要包含这个文件来使用std::function
。
#include <functional>
您没有指定Class::OnCallBack::MakeFunctor
的签名,所以我猜它是这样的:
template<typename T>
Functor<T> MakeFunctor(T*, doesnt_matter (T::*)(doesnt_matter));
只是因为this
在您的示例中显式传递。
在这种情况下,这不是c++的问题,而是你的MakeFunctor
。如果是:
template<typename F>
Functor<F> MakeFunctor(F f);
你可以把它叫做:
Class::OnCallBack::MakeFunctor([]() { dosomething; });
c++中没有lambda函数。c++中的"lambda"结构定义了一个具有operator()
的类。一个函子。它还定义了该类的一个实例。
我不知道你的实际问题是什么,但我猜它与你不能命名的类型有关。您通常可以通过使用decltype
来解决这个问题,例如:
auto f = [](...) { ... };
typedef decltype( f ) LambdaType;
另一个问题可能是lambda的每个实例,甚至是相同的实例,具有不同的,不相关的类型。同样,解决方案可能是使用auto
创建具有单个lambda实例的命名变量。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 函数指针,Functor还是Lambda
- c++中从Lambda函数生成Functor