Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Szablony klas, jak wyspecjalizować jedną metode wewnątrz szablonu

Ostatnio zmodyfikowano 2014-01-28 16:15
Autor Wiadomość
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
C/C++
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.
P-103403
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.
P-103405
debilek
Temat założony przez niniejszego użytkownika
» 2014-01-28 14:49:52
Częsc specjalizacja to było coś takiego chyba

C/C++
template < typename T *>
class queueT {....}
Ale to się wiąże z definiowaniem klasy od nowa ale mi potrzeba tylko tą
 jedną funkcje
P-103409
Monika90
» 2014-01-28 14:59:35
Użyj type_traits i techniki co się nazywa tag dispatching.

C/C++
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; }
};
P-103410
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
P-103428
« 1 »
  Strona 1 z 1