Ich frage mich, ob es eine einfache Möglichkeit gab, einen Alias einer C++ - Klassenfunktion zu schreiben. Zum Beispiel, wenn ich einige list
Container-Objekt haben, wäre eine logische FunktionC++ Klassenfunktion Aliase
int list::length() { return len; }
Aber ein weiterer logischer Alias sein, dass Programmierer könnte könnte So
int list::size() { return len; }
, statt zu schreiben beide Funktionen mit ihrer vollen benutzen, Körper, gibt es eine Möglichkeit, list::size()
ein Alias von list::length()
so zu machen, dass es kein Doppel ist, wenn kompiliert, sondern verweist auf die gleiche Funktion?
Ich habe gelesen, dass Sie dies mit #define
tun können, aber ich möchte keine Verwechslung mit anderen Code-Namen irgendwo völlig außerhalb des Umfangs (d. H. Eine 'Größe' Variable) verursachen.
Ich habe auch gelesen, dass Funktionszeiger es beheben können, aber das ist nicht genau ein Alias (da es de-referenzieren muss), noch Funktion Zeiger können eine Deklaration gegeben werden, die es eine verwirrende Help-Line zu geben Benutzer (ich würde denken), plus die Verwirrung, wenn ich jemals meinen Code in ein anderes Objekt verschachteln muss (ich muss den Umfang justieren).
inline int list::length() { return len; }
inline int list::size() { return length(); }
Oder gibt es eine strenge ‚alias‘ Syntax für C++:
Eine meiner Vermutungen ist, wird die folgende als eine direkte Funktion alias von den meisten optimierende Compiler genommen werden? (Ich konnte keine finden - war mir nicht sicher)
Also, was wäre der effizienteste Weg, dies zu tun?
EDIT: Ich habe die Antwort einfach akzeptiert, um die Frage zu beenden, da es nur eine Kuriosität von mir ist. Jeder mit guten Informationen, bitte fügen Sie Kommentare oder Antworten, und ich kann sogar meine Antwort ändern.
Aliasing in C++ wird normalerweise durch Referenzen durchgeführt, die wie Zeiger funktionieren und die Notwendigkeit der Dereferenzierung hinzufügen. – imreal
Ihr Endcode sollte die gleiche Assembly für beide Funktionen von jedem modernen Compiler erzeugen, wenn ich richtig bin. – chris
Gute Frage. Ich denke, ein Schritt dahin wurde in "C++ 11" gemacht, indem man Standardfunktionen und gelöschte Funktionen zuließ. Wenn 'int foo() = delete' ok ist, warum kann' int foo() = int foo_default() 'aus den angegebenen Gründen nicht in Ordnung sein? Vielleicht im nächsten Standard :) Soweit ich weiß gibt es momentan keinen besseren Weg, als explizit auf die andere Funktion im Körper zu verweisen. – SomeWittyUsername