gpt4 book ai didi

c++ - 调用作为模板参数从 lambda 崩溃传递的成员函数指针

转载 作者:行者123 更新时间:2023-11-28 04:25:19 25 4
gpt4 key购买 nike

我有以下代码:

#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 的指针并调用 pt 对象上 ?

最佳答案

您的问题是捕获的 p 变成悬空的“引用”,将其更改为:

template <class T, class P>
std::function<void()> MemCB(T &t, P p)
{
return [&, p]() {(t.*p)();};
}

关于c++ - 调用作为模板参数从 lambda 崩溃传递的成员函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54470686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com