def*_*ode 14 c++ lambda bind c++11
可能重复:
绑定与Lambda?
std::bind由于lambdas获得了广泛的支持,我的使用已降至0.
是否有任何特别std::bind适合lambda函数的问题?
有没有令人信服的理由保持std::bind标准一旦增加了lambda?
Luc*_*ton 21
您可以按值或按引用捕获,问题是按值捕获实际上意味着"通过复制捕获".这是一种仅限移动式的止动器.所以你不能使用lambda来执行以下操作:
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();
Run Code Online (Sandbox Code Playgroud)
IIRC标准委员会简要地考虑过允许在lambda捕获列表中任意表达来解决这个问题(可能看起来像这样[std::move(f)] { return f.bar(); }),但我认为没有一个可靠的提议并且C++ 11已经迟到了.
那和lambdas对单形行为的限制对我来说是违规行为.
| 归档时间: |
|
| 查看次数: |
3754 次 |
| 最近记录: |