没有 C++0x 的 C++ lambda 函数?

标签 c++ boost lambda

我有一个 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/

相关文章:

c++ - 为什么 std::vector 比 std::deque 更受欢迎?

c++ - 使用 exit 和全局对象

C++ 数据结构类似于具有多个键级别的 std::map

c++ - boost::interprocess - allocate_aligned 在共享内存中?

c++ - 为什么我不能将 std::unordered_map 或 boost::unordered_map 与 boost::multiprecision 类型一起使用?

c++ - 引用临时和警告

c++ - boost::deadline_timer::async_wait 不是异步的

java - Lambda 在 forEach 中使用外部连接变量

c# - 如何根据第一个列表匹配检索子字符串

c# - Lambda 参数不在范围内——在构建二进制 lambda 表达式时