Да, разрешая перегрузку по типам возврата, усложняет язык. Это усложняет решение перегруженных идентификаторов (например, имена функций). Но это невозможно, например. Haskell позволяет перегружать функцию на основе возвращаемого типа.
class Num a where
fromInteger :: Integer -> a
...
Num
класс типа в Haskell с методом, который называется fromInteger
, который является функцией от произвольного размера Integer
до произвольного типа, который имеет экземпляр Num
. Механизм класса типа Haskell довольно отличается от концепции класса объектно-ориентированных языков. Поэтому мое объяснение может показаться странным.
Но в результате я могу использовать функцию fromInteger и, в зависимости от вызывающего контекста, различные реализации chooen во время компиляции.
Существует целая серия исследований систем типа, которые сделали эту функцию возможной. Поэтому я бы сказал, что это выполнимо в статически типизированных языках. Динамически типизированные языки либо потребуют путешествия во времени, либо некоторые умные идеи.
Вы пробовали LISP ?? Если не попробовать, это может решить вашу проблему. – Zinx
Возможный дубликат [Перегрузка функций по типу возврата?] (Http://stackoverflow.com/questions/442026/function-overloading-by-return-type) – nawfal