【问题标题】:Elegant porting of lambda expressions in C++在 C++ 中优雅地移植 lambda 表达式
【发布时间】:2011-09-23 15:58:59
【问题描述】:

由于 lambda 表达式需要 GCC 版本 > 4.4:将包含几个带有引用绑定变量的 lambda 表达式的代码移植到 C++0x 之前的代码的最优雅或最快(但不是太“脏”)的方法是什么?

这可以使用模板/宏以半自动化的方式完成吗?

【问题讨论】:

    标签: c++ gcc c++11 lambda


    【解决方案1】:

    也许你应该看看boost::lambda。这应该可以满足您的需求。

    【讨论】:

    • +1。我稍微使用了 boost::lambda,但在某些方面我发现它很尴尬。您不能直接在 lambda 参数上使用方法。例如你不能做sort(v.begin(), v.end(), _1.size() < _2.size()),但你可以做sort(v.begin(), v.end(), f(_1) < f(_2) )。也许我错过了什么......
    • 从 Boost 1.47 开始(目前处于测试阶段,将在未来几周内发布),Boost.Lambda 已正式弃用并由Boost.Phoenix v3 取代,因此 Boost.Phoenix 是更好的推荐此时。
    • @Aaron : Boost.Phoenix 包含懒惰的wrappers for all standard library containers and algorithms,所以看起来像sort(v.begin, v.end(), size(_1) < size(_2)),没有任何额外的代码。
    • @ildjarn:到目前为止我还没有意识到这一点。感谢您的提示。
    【解决方案2】:

    (免责声明:我链接到我自己的网站。)

    大约一年前,我在a blog post of mine 上添加了一些有用的宏。我不知道它的便携性如何,而且它非常有限。但是对于简单的表达式,效果很好。

    请注意,我自己并没有发现它有太多用处,所以它不可能那么好:-)

    sort(vs.begin(), vs.end(),
    YALM(bool,vector<int>&,vector<int>&,return l.size() < r.size()  )
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 2019-02-16
      • 2015-03-04
      • 2017-10-02
      • 2011-01-26
      相关资源
      最近更新 更多