簡體   English   中英

調用從lambda崩潰作為模板參數傳遞的成員函數指針

[英]Calling a member function pointer passed as template argument from lambda crashes

我有以下代碼:

#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的指針,並在t對象上調用p

您的問題是捕獲的p成為懸掛的“參考”,將其更改為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM