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

二进制01

我有以下代码:

#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对象?

杰洛德42

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

传递lambda作为参数

来自分类Dev

Malloc调用作为函数参数

来自分类Dev

将函数作为参数传递(Lambda)

来自分类Dev

Lambda作为成员函数模板的默认参数

来自分类Dev

Lambda函数作为参数传递

来自分类Dev

函数调用作为参数值?

来自分类Dev

将成员或非成员函数指针作为参数传递

来自分类Dev

将函数调用作为参数传递

来自分类Dev

Lambda作为模板参数

来自分类Dev

将指向成员函数参数的指针传递给模板参数

来自分类Dev

调用作为参数传递的函数

来自分类Dev

传递lambda作为函数指针,该lambda返回多态的unique_ptr

来自分类Dev

C ++将指向成员的指针作为模板参数传递

来自分类Dev

C ++:将lambda作为带有模板参数的函数进行传递会使推导模板类型失败

来自分类Dev

模板函数指针和lambda

来自分类Dev

使用指向成员的指针将成员函数作为参数传递

来自分类Dev

lambda函数使用其参数作为模板参数调用模板函数

来自分类Dev

将成员函数指针作为参数传递给模板方法

来自分类Dev

传递lambda作为参数

来自分类Dev

Malloc调用作为函数参数

来自分类Dev

lambda作为实例函数指针

来自分类Dev

将成员或非成员函数指针作为参数传递

来自分类Dev

Lambda函数作为类成员

来自分类Dev

无法将lambda作为参数使用模板函数

来自分类Dev

将指针传递给成员函数作为void *函数的参数

来自分类Dev

如何存储/检索用作模板参数的成员函数指针?

来自分类Dev

接受lambda函数和函数指针作为参数

来自分类Dev

将lambda函数作为HOF的参数传递

来自分类Dev

将 OrderBy lambda 函数作为参数传递