Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [C++]Template class specialisatie, hoe leden buiten de class declareren  (gelezen 1110 keer)

Offline Joshua822

  • Lid
Hallo allemaal,

in C++ kan je leden van een class ook buiten de class declareren. Dit kan soms de leesbaarheid wat beter maken. Maar wat als die class nu eigenlijk een specialisatie van een template class is ? Ik kan het antwoord niet direct via Google vinden. Maar dit is wat ik al heb geprobeerd te doen met een simpele test class:
template < typename T >
class MyContainer
{
        T Content;
    public:
        MyContainer ( T StartValue );
        T Get ( );
        void Set ( T NewValue );
};

template < typename T >

MyContainer < T > :: MyContainer ( T StartValue )
{
    Content = StartValue;
}
     
template < typename T >
           
T MyContainer < T > :: Get ( )
{
    return Content;
}

template < typename T >

void MyContainer < T > :: Set ( T NewValue )
{
    Content = NewValue;
}

template <>

class MyContainer < unsigned char >
{
        unsigned char Content;
    public:
        MyContainer ( unsigned char StartValue );
        unsigned char Get ( );
        void Set ( unsigned char NewValue );
};

template <>

MyContainer < unsigned char > :: MyContainer ( unsigned char StartValue )
{
    Content = StartValue;
}
     
template <>
           
unsigned char MyContainer < unsigned char > :: Get ( )
{
    return Content;
}

template <>

void MyContainer < unsigned char > :: Set ( unsigned char NewValue )
{
    Content = NewValue;
}
Maar dit is fout, want het compileert niet.

Weet iemand dus hoe ik dit kan doen ( als het al mogelijk is ) ?

Alvast bedankt!

Re: [C++]Template class specialisatie, hoe leden buiten de class declareren
« Reactie #1 Gepost op: 2010/06/01, 16:16:35 »
Ik zou de template<> eens weg doen voor de functies, dus
void MyContainer<unsigned char>::...
 
Ik implementeer meestal de functies van een template in een de template zelf... Kijk maar eens even hoe een copy constructor van een iterator van een hashmap er zou uitzien...
template<class Key, class Value, class Hash, class Equals, class Iterator>
typename HashMap<Key,Value,Hash,Equals>::iterator<Iterator>
     (const typename HashMap<Key,Value,Hash,Equals>::iterator<Iterator>& rhs ) {
     //...
}
VS.
template<class Key, class Value, class Hash, class Equals>
class HashMap {
//...
    template<class Iterator>
    class iterator {
        iterator(const iterator& rhs) {
        }
    };
};
Wat vindt jij dan netter?

- SeySayux
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net