【发布时间】:2020-03-16 13:37:12
【问题描述】:
我用std::function、std::bind编写了回调方法。
A 类中的std::function 对象func1 指向函数bFoo(int, int),它是B 类的成员。
我的程序中的回调代码:
// Class A - A.h
class A
{
public:
template<class T>
void setCallback(T *pClass, void(T::*pFunc)(int, int));
private:
std::function<void(int, int)> func1;
}
template<class T>
inline void A::setCallback(T *pClass, void(T::*pFunc)(int, int))
{
func1 = std::bind(pFunc, pClass, std::placeholders::_1, std::placeholders::_2);
}
// Class A - A.cpp
...
func1(x,y);
...
// Class B - B.h
class B
{
public:
void bFoo(int x, int y);
private:
A a; // instance of class A
}
// Class B - B.cpp
B::B()
{
a.setCallback(this, &B::bFoo);
}
效果很好。
不过,听说在 C++ 14 及更高版本中,std::bind 可以完全被 lambda 替代,而 lambda 相对于std::bind 有很多优势。
所以我尝试将绑定更改为 lambda 并查找了许多示例,但就我而言,我还没有找到如何将绑定替换为 lambda。
我想使用 lambda 将另一个类的成员函数分配给 std::function,而不是 std::bind。
这可能吗?
【问题讨论】:
-
应该是
[=](int x, int y){(pClass->*pFunc)(x,y);}。 -
@HolyBlackCat 你是对的。感谢帮助!
标签: c++ lambda c++14 std-function stdbind