Tak, zezwalanie na przeciążanie typów zwrotów komplikuje język. To komplikuje rozwiązywanie przeciążonych identyfikatorów (np. Nazw funkcji). Ale nie jest to niemożliwe, np. Haskell pozwala na przeciążenie funkcji w zależności od ich typu zwrotu.
class Num a where
fromInteger :: Integer -> a
...
Num
jest klasa typu Haskell z metodą zwaną fromInteger
którym funkcja z dowolnego rozmiaru Integer
do dowolnego typu, który ma instancję Num
. Mechanizm klasy typu Haskell różni się nieco od koncepcji klasowej języków obiektowych. Dlatego moje wyjaśnienie może zabrzmieć dziwnie.
Ale wynikiem tego jest możliwość użycia funkcji fromInteger i, w zależności od kontekstu wywołującego, różne implementacje są wybierane podczas kompilacji.
Istnieje cała seria badań systemów typów, dzięki którym ta funkcja jest możliwa. Dlatego powiedziałbym, że jest to wykonalne w statycznie napisanych językach. Dynamicznie napisane języki wymagałyby podróży w czasie lub sprytnych pomysłów.
Czy próbowałeś LISP? Jeśli nie, spróbuj, może to rozwiązać twój problem. – Zinx
możliwy duplikat funkcji [Przeciążenie funkcji według typu zwrotu?] (Http://stackoverflow.com/questions/442026/function-overloading-by-return-type) – nawfal