首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >和lambda相比,bind::bind仍然有用吗?

和lambda相比,bind::bind仍然有用吗?
EN

Stack Overflow用户
提问于 2011-11-11 01:04:30
回答 2查看 4.2K关注 0票数 14

可能重复:

Bind Vs Lambda?

由于lambda获得了广泛的支持,我对std::bind的使用已经下降到0。

在lambda函数上是否存在std::bind唯一适合的问题?

有一个令人信服的理由,使std::bind保持在标准,一旦lambdas添加了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-11 01:30:40

您可以通过值捕获或引用捕获,问题是按值捕获实际上意味着“复制捕获”。这是一个只移动类型的节目停止。因此,您不能使用lambda来执行以下操作:

代码语言:javascript
复制
struct foo { void bar() {} };

std::unique_ptr<foo> f { new foo };
auto bound = std::bind(&foo::bar, std::move(f));
static_assert( std::is_move_constructible<decltype(bound)>::value, "" );
bound();

标准委员会简要地考虑允许在lambda捕获列表中任意的表达来解决这个问题(这看起来像[std::move(f)] { return f.bar(); }),但是我不认为有一个可靠的提议,而且C++11已经晚了。

对于我来说,这一点和对蓝宝石单形行为的限制是交易的破坏者。

票数 21
EN

Stack Overflow用户

发布于 2011-11-11 01:11:22

bind很适合创建绑定成员函数的引用:

代码语言:javascript
复制
Foo x;
auto f = std::bind(&Foo::bar, &x, 12, true);
register_callback(f);

编辑:正如Luc所演示的,这种结构非常灵活,允许实例指针以惊人的形式出现(例如智能指针)。

如果可行的话,lambda可能更好,特别是因为它提供了更大的优化潜力,但是绑定表达式仍然有它们的位置。

(无论如何,对于存储可调用对象的类型,autostd::function更可取。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8088494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档