szablony klas jak przeciazyć operator<<
Ostatnio zmodyfikowano 2014-01-16 13:21
dziabongo Temat założony przez niniejszego użytkownika |
szablony klas jak przeciazyć operator<< » 2014-01-16 12:46:42 Witam! Potrzebuje pomocy z jedną rzeczą, chodzi o przeciążenie operatora<< w szablonie klasy mam taką klase template < typename any > class szablon_base { private: any * m_tab; int m_rozmiar; public: szablon_base() { m_tab = NULL; m_rozmiar = 0; }; szablon_base( int rozmiar ); ~szablon_base() { delete[] m_tab; }; bool powieksz( int powiekszenie ); bool pomniejsz( int pomniejszenie ); void wypelnij( any x, int start = 0 ); };
i tak jedno rozwiązanie problemu znalazłem na necie a jedno w książce ale tego z neta nie rozumiem, i tu bym prosił o małe wyjaśnienie. żeby mi to zadziałało muszę przed szablonem klasy zrobić takie coś template < typename any > class szablon_base; template < typename any > std::ostream & operator <<( std::ostream & os, const szablon_base < any > & x );
a wewnątrz klasy przyjaźń wygląda tak friend std::ostream & operator << <>( std::ostream & os, const szablon_base < any > & x );
no i sama funkcja template < typename any > std::ostream & operator <<( std::ostream & os, const szablon_base < any > & x ) { for( int i = 0; i < x.m_rozmiar; i++ ) os << x.m_tab[ i ] << " "; os << std::endl; return os; }
a to co jest w książce wiąże się z pisaniem funkcji dla każdego typu std::ostream & operator<<(std::ostream & os, const szablon_base<int> & x) i tak osobno dla double itd... może mi ktoś to krótko wyjaśnić o co w tym chodzi i po co jest ten zapis <> po słowie operator<< proszę o pomoc |
|
Monika90 |
» 2014-01-16 13:21:25 Bez <> po nazwie funkcji deklaracja friend nie deklaruje szablonu funkcji, ale zwykłą funkcję. Dlatego potem musisz ją definiować osobno dla każdego typu z którym chcesz jej używać. Oprócz tego sposobu z <> można też zwyczajnie zdefiniować funkcję zaprzyjaźnioną wewnątrz szablonu klasy template < typename any > class szablon_base { friend std::ostream & operator <<( std::ostream & os, const szablon_base & x ) { for( int i = 0; i < x.m_rozmiar; i++ ) os << x.m_tab[ i ] << " "; return os << std::endl; } };
|
|
« 1 » |