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
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.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist durchaus gültig. Hier ist, was standard ist zu sagen:
was bedeutet, können Sie konvertieren Sie Ihre Zeiger auf die Klasse, um einen void-Zeiger. Und ...
was bedeutet, dass Sie verwenden können
static_cast
konvertieren Sie einen void-Zeiger zurück zu einer ursprünglichen Klasse Zeiger.Hoffe, es hilft. Viel Glück!
void*
kann implizit sein (nicht erforderlich ist eine Besetzung).Die Standard-version, sind Sie zu zitieren? Soweit ich sehen kann, es ist weder C++03 und C++11.
InformationsquelleAutor
In C++ müssen Sie nicht die statischen cast zu bekommen zu
void*
:NB: Ihre Umsetzung
tfunc()
ist ganz richtig, dass es hat müssen die Darsteller.InformationsquelleAutor quamrana
Ja, es ist gültig, wie pro standard § 5.2.9.7
InformationsquelleAutor billz
InformationsquelleAutor UfnCod3r