Witam.
Jestem w trakcie poznawania tajników C++.
No i mam takie pytanie. Mam jakąś klasę szablonową która zawiera parametr inny niż typ - czyli załóżmy że liczbę całkowitą (int).
template <int LICZBA> class Test {};
W szablonie tym deklaruję sobie przyjaźń z jakąś globalną funkcją szablonową, która jak wiemy może mieć jako parametr tylko typ. Niech będzie to:
template <int LICZBA> class Test
{
public:
void print() {
cout << LICZBA;
}
friend void funkcja (T obiekt, Test<LICZBA> tmp);
}
Mam teraz deklarację takiej funkcji:
template <class t> void funkcja (t & obiekt) { obiekt.print(); }
No i do tej pory jest wszystko ok... Problem zaczyna się w momencie gdy jako funkcję zaprzyjaźnioną zapragnę mieć np. operator....
friend ostream& operator<< (ostream& out, Test<LICZBA>& tmp);
i definicja szablonu
template <class t> ostream& operator << (ostream& out, t & obiekt) { obiekt.print(); }
Niby różnica jest niewielka ponieważ zamiast "void funkcja()" napisałem "ostream& operator<<()" jednak program się nie skompiluje bo linker nie może znaleźć na przykład funkcji "operator << (ostream& , Test<1>& )".
Da się to jakoś obejść?