我有以下代码:
#include <functional>
struct Foo {
void Callback()
{}
};
template <class T, class P>
std::function<void()> MemCB(T &t, P p)
{
//return [&]() {t.Callback();}; //no issues if done this way.
return [&]() {(t.*p)();};
}
int main()
{
Foo f;
std::function<void()> func = MemCB(f, &Foo::Callback);
func();
}
这会崩溃(至少在启用优化的情况下),问题是 尝试在此处调用成员函数:
return [&]() {(t.*p)();};
正在发生什么,导致这里出现问题?
有没有什么方法可以像我在此处尝试的那样传入对象t
和成员函数p
的指针,并在p
对象上调用t
?
答案 0 :(得分:1)
您的问题是,捕获的p
变成悬挂的“参考”,将其更改为:
template <class T, class P>
std::function<void()> MemCB(T &t, P p)
{
return [&, p]() {(t.*p)();};
}