【问题标题】:Can lambdas be STL-adaptable?lambda 可以适应 STL 吗?
【发布时间】:2020-10-23 21:14:07
【问题描述】:

“使函子类具有适应性” - 在 Effective STL 第 40 项中告诉 Scott Meyers。有一个问题 - lambda 函数可以适应性吗? (Lambdas 不提供对继承机制的访问权限,对吧?)

【问题讨论】:

  • 他真的建议多态性吗?这真的很好奇。无论如何,如果你不能直接将它传递给消费者模板,你会在 std::function 中捕获一个 lambda。就像任何其他类型的可调用对象一样。
  • 这整个项目已被 c++11 淘汰,应该被忽略。这些天你只是不使用not1bind2nd。这些东西已被弃用和/或从标准中删除。 Lambdas 和 std::bind 替换它们,你不需要为 std::bind 调整任何东西

标签: c++ c++11 lambda functor c++-standard-library


【解决方案1】:

该项目不是在谈论继承,而是在谈论组合。

在 C++11 之前,如果您想反转一元谓词的输出,您将定义 argument_typeresult_type 成员类型,因此您可以将其包装在 std::not1 中。

或者,如果您想部分应用二元运算,您可以定义first_argument_typesecond_argument_typeresult_type,将其传递给std::bind1ststd::bind2nd

您无法将成员添加到 lambda 的类型,因此您不能将它们与旧适配器一起使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-22
    • 2019-12-20
    • 2015-09-15
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多