[C++] Przeładowanie operatora i szablony


(Copycona) #1

Witam,

W swojej klasie chciałbym przeładować operator *= dla każdego typu liczbowego.

unsigned/signed short/int/long, float/double - trochę tych kombinacji przeładowań jest.

Postanowiłem użyć szablonów i wykonałem to tak:

#include

(Rolek0) #2

Kompilator powinien znać całą definicję szablonu aby mógł wygenerować konkretyzacje. Jeśli koniecznie chcesz definicję w osobnym module to musisz wymusić wygenerowanie odpowiednich konkretyzacji; ale dla takiej funkcji nie ma to za bardzo sensu, nawet jakby to nie był szablon to takie proste funkcje lepiej dawać jako inline.


([alex]) #3
#include 


class test

  {

   public:

   test():var(1.0) {}

   template test &operator*=(const T &t) { var*=t; return *this; }

   //właściwie tu by wystarczyło:

   //test &operator*=(double t) { var*=t; return *this; }

   operator double()const { return var; }

   private:

   double var;

  };


int main()

  {

   test cos;

   cos*=2;

   std::cout << (double)cos << std::endl;

   return 0;

  }