與 stdbind 一起使用的 stdfunction
想想我們需要使用引數回撥函式的情況。與 std::bind
一起使用的 std::function
提供了一個非常強大的設計結構,如下所示。
class A
{
public:
std::function<void(int, const std::string&)> m_CbFunc = nullptr;
void foo()
{
if (m_CbFunc)
{
m_CbFunc(100, "event fired");
}
}
};
class B
{
public:
B()
{
auto aFunc = std::bind(&B::eventHandler, this, std::placeholders::_1, std::placeholders::_2);
anObjA.m_CbFunc = aFunc;
}
void eventHandler(int i, const std::string& s)
{
std::cout << s << ": " << i << std::endl;
}
void DoSomethingOnA()
{
anObjA.foo();
}
A anObjA;
};
int main(int argc, char *argv[])
{
B anObjB;
anObjB.DoSomethingOnA();
}