Casting-Klasse Zeiger auf Void-Zeiger

Wie kann ich in der Lage zu werfen eine Klasse Zeiger auf einen generischen Zeiger wie void*? Wie ist dieser code gültig?,

class CFoo
{
   int a;
public:
   CFoo():a(1){}
   ~CFoo(){}
   getNum(){return a;}
};

void tfunc(void* data)
{
    CFoo* foo = static_cast<CFoo*>(data);
    std::cout << "Number: " << foo->getNum();
    delete foo;
}

int main()
{
   CFoo* foo = new CFoo;
   void* dt = static_cast<void*>(foo);
   tfunc(dt); //or tfunc(static_cast<void*>(food));

   return 0;
}
Letztes mal habe ich gelesen "in der Lage", versprach ich zu tun, etwas schreckliches, wenn ich zu stoßen, das nächste mal. Schade, ich kann mich nicht erinnern, was es war. Abgesehen davon, dass Sie brauchen noch nicht einmal den cast - man kann beliebige nicht-Funktion Zeiger auf eine void *.
Sieht gültig. Read this
wenn es kompiliert, ist es gültig und IMO muss es kompilieren. Aber ich mag diese Mischung aus C und C++...
Bitte. Bitte. Bitte vermeiden Sie wirft. C++ hat eine gewisse Luxus-Typen. Es vermeidet mögliche Fehler. Neben Indien ist versucht zu entfernen, wirft also warum nicht Sie? Es ist die größte Demokratie der Erde.
Dieser cast auf void*, ist sehr nützlich unter Bedingungen, in denen Zeiger auf zwei verschiedene Schnittstellen müssen überprüft werden, um zu wissen, ob Sie tatsächlich von dem gleichen Objekt. Vor allem, wenn die Namen der meisten abgeleiteten Klasse die Implementierung dieser Schnittstellen ist nicht bekannt.

InformationsquelleAutor domlao | 2013-09-21

Schreibe einen Kommentar