Załóżmy, że chcę móc łatwo dokonać konwersji typów zmiennych pomiędzy "string", "int" i "char[]". Sama treść tych funkcji nie jest teraz istotna, chodzi o możliwości implementacji i użycia. W takiej sytuacji jest 6 różnych zmian typów.
Najprościej zrobić tak:
char[] ToChar(int N)
{
// Zamiana int na char[]
}
char[] ToChar(string N)
{
// Zamiana string na char
}
string ToStr(int N)
{
// Zamiana int na string
}
string ToStr(char[] C)
{
// Zamiana char[] na string
}
int ToInt(string S)
{
// Zamiana string na int
}
int ToInt(char[] S)
{
// Zamiana char[] na int
}
Słyszałem, że w C++ da się zrobić jedną funkcję, która konwertuje typy "z każdego na każdy", przy czym w samej funkcji muszą być obsłużone wszystkie przejścia. Wyobrażam sobie, że to wygląda mniej więcej tak:
char[] Conv(int N)
{
// Zamiana int na char[]
}
char[] Conv(string N)
{
// Zamiana string na char
}
string Conv(int N)
{
// Zamiana int na string
}
string Conv(char[] C)
{
// Zamiana char[] na string
}
int Conv(string S)
{
// Zamiana string na int
}
int Conv(char[] S)
{
// Zamiana char[] na int
}
Wtedy w każdym przypadku użycia funkcji Conv kompilator wychwyciłby, jaki typ ma podany parametr i jakiego typu jest wymagany wynik działania funkcji. Na przykład coś takiego:
int liczba = 123;
string napis = Conv(liczba);
W tym przykładzie kompilator wybrałby funkcję "int Conv(string S)".
Jak spróbowałem czegoś takiego, to program nie chce się skompilować pokazując błąd, że są dwie wersje przeciążonej funkcji różniące się tylko zwracanym typem. Używam QtCreator.
Czy rzeczywiście da się zrobić funkcję, która tak samo się nazywa, przyjmuje takie same typy argumentów, ale zwraca różne typy wyniku? Jeżeli tak, to w jaki sposób?