我有一个 C++11 lambda 函数,它需要在没有 C++0x 的情况下实现。到目前为止,我用 boost.lambda 尝试过但没有成功。
lambda 函数捕获 4 个变量并以 2 个作为参数。在 lambda 函数的主体中有几个 if/else、case 和大约 100 行代码。
- 这甚至可以通过 boost.lambda/实现吗?
- 如果您能指出一个图书馆/举个例子,我们将很高兴。
希望我写下了您需要的所有信息。
欧元: 我让它运行了,谢谢。一个小跟进问题:
- 有没有办法给 Obj.operater()();到另一个函数作为回调函数/函数指针?
我的第一次尝试是这样的:
Lambda Obj( C, D);
command ( Obj.operator()(typeA A, typeB B));
谢谢
最佳答案
这不是 Boost.Lambda 的设计目的。最好的办法是将它变成一个普通的函数对象。
简单地转换一下:
[a, &b, c, &d](args) -> ReturnValue { body; }
进入这个:
class Lambda
{
Type_of_a a;
Type_of_b &b;
Type_of_c c;
Type_of_d &d;
public:
Lambda(Type_of_a a, Type_of_b &b, Type_of_c c, Type_of_d &d) : a(a), b(b), c(c), d(d) {}
ReturnValue operator() (args) const
{ body; }
};
然后创建 Lambda
类的实例,您可以在其中创建原始 lambda 表达式。
您可以将 Lambda
的定义放在未命名的命名空间中,以模拟 lambda 的未命名类型。
关于没有 C++0x 的 C++ lambda 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25564178/