Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

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 950 keer)

Offline Joshua822

  • Documentatieteam
  • Steunpunt: Nee
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!

Offline SeySayux

  • Lid
    • SeySayux.net
  • Steunpunt: Nee
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