In funktionsorientierten Sprachen wie Haskell kann man Funktionsdefinitionen um mehrere Achsen der Parametersignatur überladen. C++ unterstützt Anzahl und Typ der Argumente. Andere Sprachen unterstützen Werte Argument und sogar guard Klauseln (Code, den die Argumente für Bedingungen prüft.) Zum Beispiel der Fakultäts Implementierung in Haskell:Gibt es eine Möglichkeit, Funktionssignaturvergleich basierend auf Parameterwerten durchzuführen?
factorial :: (Integral a) => a -> a
factorial 0 = 1
factorial n = n * factorial (n - 1)
Wo die Definition für faktorielle wenn das Argument 0 unterscheidet mich von der Definition für factorial wenn das Argument eine andere Ganzzahl ist.
Ich habe diese Fähigkeit in C++ nicht gefunden und dachte zuerst, dass es schwierig wäre, in der Sprache zu implementieren. Weitere Überlegungen ließen mich denken, dass es eigentlich ziemlich einfach wäre und eine nette Ergänzung zur Sprache wäre, also muss ich es vermissen.
Gibt es eine Möglichkeit, dies entweder in nativer Syntax oder Vorlagen zu tun?
C++ - Vorlagen können auf Integer-Konstanten spezialisiert sein, wodurch ungefähr dasselbe erreicht wird wie in Ihrem Haskell-Beispiel. [Hier ist eine Fakultät Funktion geschrieben mit spezialisierten Vorlagen in C++] (http://stackoverflow.com/q/3082113/464709). –
Ja, dies kann mit der Metaprogrammierung der Vorlage geschehen, aber nur wenn die Parameterwerte zur Kompilierzeit bekannt sind. C++ kann nicht zur Laufzeit auf andere Parameterwerte als den virtuellen Methodenversand zugreifen. – antlersoft
Das sind keine zwei überladenen Funktionen, es ist die Funktion "Fakultät x = Fall x von 0 => 1; n => n * faktoriell (n - 1) 'mit obenaufgestreutem syntaktischem Zucker. – molbdnilo