簡體   English   中英

void指針可以指向lambda函數嗎?

[英]Can a void pointer point to a lambda function?

將函數指針指定給void指針,

double f_dummy(double x) { return x; }
...
    void *pv = f_dummy;  //compilation error

如本FAQ中所述,這是非法的。 然而,答案以聲明結束:

如果以上內容似乎適用於特定操作系統上特定版本的特定編譯器,請不要給我發電子郵件。 我不在乎。 這是非法的,期間。

編輯 :作為對他人的警告,我確實遇到了這種“ 似乎工作 ”的行為,通過涉及類模板的繼承案例。 沒有編譯器警告,沒有意外的運行時行為。

這讓我的OCD骨頭發癢,讓我想知道我一直在做什么,例如,

...
    auto l_func = [](double x){ return f_dummy(x); };
    void *pv = &l_func;
    auto pl = static_cast<decltype(&l_func)>(pv);
    cout << (*pl)(5.) << endl; 

編譯和運行干凈( g++ -std=c++11 -Wall ),是真正合法的。 是嗎?

是的,這是合法的,因為:

  • 指向對象的指針可以轉換為void*並再次返回;
  • l_func是一個對象(一個l_func函數,具有未指定的類類型) - 這是lambda的實現方式,按標准授權。

您引用的FAQ文本是不相關的,因為它引用了函數的指針。 _yourUnspecifiedLambdaType::operator()是等效的*函數,但是你在這里沒有做任何事情。

*嗯,它甚至不等同,因為它是會員功能!

暫無
暫無

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

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