Operator specjalizowany

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;

}