Szablony klas, jak wyspecjalizować jedną metode wewnątrz szablonu
Ostatnio zmodyfikowano 2014-01-28 16:15
debilek Temat założony przez niniejszego użytkownika |
Szablony klas, jak wyspecjalizować jedną metode wewnątrz szablonu » 2014-01-28 14:04:55 jak mam taka klase template < typename T > class queueTp { static const int MAX_QUEUE = 10; private: struct node { T item; node * next; }; node * m_front, * m_rear; int m_rozmiar; const int m_max_rozmiar; public: queueTp(); queueTp( int max_size ); ~queueTp(); bool isempty( void ) const; bool isfull( void ) const; bool add( T x ); bool remove_first( void ); bool remove_all( void ); void show( void ); };
kiedy zrobię queueTp<int> lub queueTp<double> wszystko elegancko działa ale kiedy queueTp<int *> to też działa ale funkcja show wyswietla mi adresy niby poprawnie ale chciałbym zrobić tak żeby wyswietlała wartości pod adresami więc chciałbym wyspecjalizować tylko jedna metodę i czy jest to możliwe. |
|
Monika90 |
» 2014-01-28 14:22:41 chciałbym wyspecjalizować tylko jedna metodę i czy jest to możliwe |
Jest to możliwe, ale tobie to nic nie da, bo potrzebujesz częściowej specjalizacji, a częściowa specjalizacja szablonów funkcji w ogóle nie jest możliwa. Użyj type_traits i techniki co się nazywa tag dispatching. |
|
debilek Temat założony przez niniejszego użytkownika |
» 2014-01-28 14:49:52 Częsc specjalizacja to było coś takiego chyba template < typename T *> class queueT {....}
Ale to się wiąże z definiowaniem klasy od nowa ale mi potrzeba tylko tą jedną funkcje |
|
Monika90 |
» 2014-01-28 14:59:35 Użyj type_traits i techniki co się nazywa tag dispatching. |
template < class T > struct Queue { T x; void show() const { show_elem( x, std::is_pointer < T >() ); } static void show_elem( const T & x, std::false_type is_ptr ) { std::cout << x; } static void show_elem( T p, std::true_type is_ptr ) { std::cout << * p; } };
|
|
debilek Temat założony przez niniejszego użytkownika |
» 2014-01-28 16:15:52 więc czeka mnie lektura na ten temat. ale jeszcze pomyślałem sobie nad czymś takim, żeby wykorzysta dziedziczenie, i funkcje wirtualne, gdzie funkcja w klasie pochodnej przysłoni tą z klasy bazowej
|
|
« 1 » |