Ich lese irgendwann zurück (wahrscheinlich auf c.l.C++. Moderiert), dass virtuelle Funktionsaufrufe templatetisiert werden können. Ich habe etwas in den folgenden Zeilen versucht.Virtuelle Aufrufe unter Verwendung der Adresse des reinen virtuellen Mitglieds. Ist es legal?
Die templated-Methode, obwohl die Adresse der reinen virtuellen Basiselementmethode zur Kompilierzeit angegeben wird, ruft die richtige Methode zur Laufzeit auf. Ist es in C++ Standard zulässig, die Adresse eines reinen virtuellen Members zu übernehmen?
Vielen Dank im Voraus
EDIT-1: entfernte ich den zweiten Teil der Frage: 'Wie funktioniert das?'. Sieht so aus, als ob das Aufmerksamkeit erregt.
EDIT-2: Ich suchte c.l.C++ moderiert und kam in dieser link (http://groups.google.com/group/comp.lang.c++.moderated/browse_thread/thread/5ddde8cf1ae59a0d).. Der Konsens scheint so zu sein, da der Standard ihn nicht einschränkt, er ist gültig.
EDIT-3: Nach dem Lesen des Codeprojektartikels (danke an ovanes), denke ich, dass die Compiler einige Magie tun. Da virtuelle Funktionen über vtable implementiert werden (was compilerspezifisch ist), ergibt die Adresse einer virtuellen Funktion immer den Offset in der vtable. Abhängig vom verwendeten 'this' -Zeiger wird die entsprechende Funktion (deren Adresse auf dem Offset steht) aufgerufen. Ich bin mir nicht sicher, wie ich das rechtfertigen soll, denn der Standard sagt nichts darüber aus!
Dank. Kennen Sie einen Abschnitt des C++ - Standards, der Member-Function-Zeiger auf reine virtuelle Elemente erwähnt? Ich habe versucht, sie zu finden, konnte aber keine spezifischen Details finden. Da Member-Pointer auf einen unvollständigen Typ erlaubt sind, sind Member-Pointer auf pure-virtuals ebenfalls erlaubt. – Abhay
Ich habe die Frage falsch gelesen. Ich werde meine Antwort aktualisieren. –
+1 Ihre bearbeitete Antwort kommt einer Antwort auf diese Frage nahe :-). Ich beginne zu denken, dass die Adressierung virtueller Funktionen (rein oder nicht) und deren Aufruf eher auf einen implementierungsdefinierten Aspekt der Sprache gerichtet ist. – Abhay