2015-12-14 4 views
7

einen Funktionszeiger auf einen Zeiger void ZuweisenKann ein Void-Zeiger auf eine Lambda-Funktion zeigen?

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

illegal ist, wie in diesem FAQ erläutert. Die Antwort schließt jedoch mit der Aussage:

Bitte mailen Sie mir nicht, wenn das oben auf Ihre bestimmte Version des jeweiligen Compilers auf Ihrem bestimmten Betriebssystem zu funktionieren scheint. Es ist mir egal. Es ist illegal, Punkt.

bearbeitet: Verhalten, durch einen Erbfall die Klassenvorlagen Als Warnung für andere, sie habe die diese „ zu arbeiten scheint“. Keine Compilerwarnung, kein unerwartetes Laufzeitverhalten.

Das kitzelt meine OCD Knochen und macht mich fragen, ob das, was ich getan habe, zum Beispiel

... 
    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; 

, die kompiliert und läuft sauber (g++ -std=c++11 -Wall), wirklich legal ist. Ist es?

+3

'l_func' ist keine Funktion. Es ist ein Objekt. –

Antwort

Verwandte Themen