我有以下代码:
#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
对象?
您的问题是捕获p
成为悬空的“参考”,将其更改为:
template <class T, class P>
std::function<void()> MemCB(T &t, P p)
{
return [&, p]() {(t.*p)();};
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句