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
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
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.
#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;
}