3 回答

TA贡献1801条经验 获得超16个赞
C ++ 0x lambda是单态的,而bind可以是多态的。你不能有这样的东西
auto f = [](auto a, auto b) { cout << a << ' ' << b; }
f("test", 1.2f);
a和b必须具有已知的类型。另一方面,tr1 / boost / phoenix / lambda bind允许您执行以下操作:
struct foo
{
typedef void result_type;
template < typename A, typename B >
void operator()(A a, B b)
{
cout << a << ' ' << b;
}
};
auto f = bind(foo(), _1, _2);
f("test", 1.2f); // will print "test 1.2"
请注意,此处未固定类型A和B。仅当实际使用f时,才能推论这两个。

TA贡献1795条经验 获得超7个赞
Lambda的优点之一是,当您需要在现有函数之上添加一些大逻辑时,它们会更加有用。
使用bind,即使仅在该位置需要逻辑,您也必须创建一个新的函数/方法/函数。您需要提供一个适当的名称,它可能会使代码难以理解,因为它可能会使您分解相关的逻辑。
使用lambda,您可以在lambda内添加新逻辑(但如果创建新的可调用对象有意义,则不必强制这样做)。
- 3 回答
- 0 关注
- 419 浏览
添加回答
举报