Dies scheint inkonsistent. Warum verwenden wir & Beispiel :: func anstelle von Beispiel :: func? Gibt es eine Verwendung für Beispiel :: func oder & exampleFunction? Es scheint nicht so, als könnten wir einen Verweis auf eine Funktion machen, so dass Beispiel :: func ausgeschlossen wird. und ich kann nicht an eine Möglichkeit denken, & exampleFunction zu verwenden, da exampleFunction bereits einen Zeiger zurückgibt.gibt es eine Verwendung für & func oder class :: func in C++?
#include <iostream>
class Example {
public:
void func() { std::cout <<"print me\n"; }
};
void exampleFunction() { std::cout << "print me too\n"; }
typedef void (Example::*ExampleFunc_t)();
typedef void (*ExampleFunction_t)();
int main()
{
Example e;
ExampleFunc_t f = &Example::func;
ExampleFunction_t f2 = exampleFunction;
(e.*f)();
f2();
return 0;
}
In C++ gibt es funktioniert auch Referenzen (typedef void (& FuncRef_t)()), aber keine Referenzen auf Mitgliedsfunktionen. – dalle
Ja, ich denke, es ist nützlich, diese implizite Konvertierung für Funktionen zu haben. weil Sie meistens sowieso einen Zeiger übergeben möchten (Sie können keine Funktion "übergeben", also gibt es einen Zeiger auf sie durch implizite Konvertierung). Ich schätze, der Grund, warum T :: f nicht ausreicht, ist, dass es nicht eindeutig wäre: Wenn es bereits ein Elementfunktionszeiger –
wäre, dann kann man nicht Base :: f(); eine Basisklassenfunktion aufrufen. du müsstest schreiben (this -> * Base :: f)(); was irgendwie scheiße ist. Also, die & T :: foo einen Zeiger zu bekommen ist eine gute Lösung, denke ich. –