Mar*_*n G 4 c++ lambda stdbind std-function
读取用于C++ 17的建议有关删除标准的一些过时,旧的和未使用的部分(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4190.htm)我找到D.9部分有点奇怪:
D.9"粘合剂"[depr.lib.binders]
这定义了bind1st()/ bind2nd(),它们被bind()严格取代.(在将来,我会认为,bind()的本身已被lambda表达式,尤其是通用的Lambda表达式取代,所以绑定()应该被废弃,但不是此提案的一部分.)
我没有得到的是关于bind()
自己被lambdas取代的评论.
如果我有课:
class A
{
public:
void f(int a){}
void f(int a, int b){}
}
Run Code Online (Sandbox Code Playgroud)
而且我想将一个函数指针传递A::f
给某个函数,someFunction
以便这个函数可以在实例化的对象上调用它A
,我声明someFunction
:
void someFunction(const std::function<void(int, int)>&);
Run Code Online (Sandbox Code Playgroud)
并称之为:
A a;
someFunction(std::bind(static_cast<void (A::*)(int, int)> (&A::f),
std::ref(a),
std::placeholders::_1,
std::placeholders::_2));
Run Code Online (Sandbox Code Playgroud)
如何使用lambda实现相同的功能?真的没有什么bind()
可以做的,用lambda无法做到吗?
你怎么做呢?非常直接且不太深奥(我的观点)比使用std::ref
和的绑定示例placeholders_
.
#include <iostream>
#include <functional>
class A
{
public:
void f(int a) {}
void f(int a, int b) { std::cout << a + b << '\n';}
};
void someFunction(const std::function<void(int, int)>& f)
{
f(1, 2);
}
int main()
{
A a;
someFunction([&] (int x, int y) { a.f(x, y); });
return 0;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
942 次 |
最近记录: |