Loteria typów

Wyobraźmy sobie, że piszemy zestaw metod czy funkcji różniących się typem parametru - ot, choćby tworzymy klasę komunikacyjną która ma metody Send biorące napis, liczbę etc. Albo piszemy klasę obsługującą komunikację z bazą danych i metody Bind do wiązania parametrów różnego typu. Albo... (każdy po chwili zastanowienia dorzuci pewnie z 10 przykładów).

Wyobraźmy sobie dalej, że wśród obsługiwanych typów bywają bool i string. Ciągnąc przykład z tą samą nazwą, wyobraźmy sobie że dostarczamy Bind(bool) i Bind(const string&).

Jeszcze dalej wyobraźmy sobie, iż ktoś łatwowierny pisze

        Bind("ala ma kota");

czy też

        Bind("");

Istotną informacją jest, że kompilatory wolą zrzutować takowy napis na bool niż na string! W obu wypadkach wywołane zostanie Bind(true)!

Wnioski:

  • jeśli robimy gdzieś metody różniące się jedynie typem, to trzeba dostarczyć metodę o parametrze const char * (której treścią może być wywołanie metody od string'a - ale istnieć taka metoda musi);
  • choć przeciążanie metod jest bardzo efektowne, bezpieczniejsze jest odróżnianie ich nazwą (BindBool, BindString itp).
komentarze obsługiwane przez Disqus