mam w szablonie klasy o nazwie typu typ - matrix etc. etc. - przeciążony operator + zwracający klase typu typ chciałby jednak aby ten operator jeśli typ to char zachowywał się trochę inaczej aniżeli przeciążenie wcześniej zrobione wiec chciałbym jakby zrobić taki operator specjalizowany - pytanie gdzie go definiować i jak bo w w bo w szablonie klas zwraca błąd z góry dzięki
http://www.parashift.com/c+±faq-lite/templates.html#faq-35.7 - tu masz wyjaśnione, jak robić takie specjalizacje dla szablonów funkcji (w tym operatorów).
nie za bardzo widze tam odpowiedź na moje pytanie ale dzieki
nie za bardzo widze tam odpowiedź na moje pytanie ale dzieki
hmm, zobrazuje to na najsłynniejszej klasie Foo:
#include
using namespace std;
/* myk, zeby dzialal friend w templacie */
template class Foo;
template
Foo operator+(const Foo &a, const Foo &b);
template
class Foo {
public:
Foo(T _i = T()) : i(_i) {}
friend Foo operator+<>(const Foo &a, const Foo &b); /* te dziubki "<>" to tez myk, zeby dzialal template'owy friend w templacie */
private:
T i;
};
template
Foo operator+(const Foo &a, const Foo &b)
{
cerr << "domyslny operator+" << endl;
return Foo(a.i + b.i);
}
template <>
Foo operator+(const Foo &a, const Foo &b)
{
cerr << "specyficzny dla int operator+" << endl;
return Foo(a.i + b.i);
}
int main()
{
Foo i = 5, j = 6;
Foo k = i + j;
Foo fi = 5.0, fj = 6.0;
Foo fk = fi + fj;
return 0;
}