Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Template-Spezialisierungs als Ableitung von Basisklasse

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.10.2007, 14:43 Uhr
~zzt
Gast


Hallo,

Hallo, ich habe eine Basis-Klasse von der mehrere Klassen erben. Mit übergebenem Parameter soll eine andere Klasse angestoßen werden.
Jetzt habe ich aber eine Template Klasse für die ich gerne lediglich für den Template-Parameter double ableiten will.


C++:
Switch_Algorithm<double> o_alg;
Basis_Klasse<double>* alg_ptr  = o_alg.Get_Algorithm(level);    




C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14


C++:
template <class T>    Basis_Klasse<T>*
Switch_Algorithm<T>::Get_Algorithm(const int level)
{
    switch(level)
    {
        case 0:
            return new Klasse1<T>();
        case 1:
            return new Klasse2<T>();
        case 2:
                        reutrn new Klasse3<double>();
    }
    return NULL;
}    




Leider klappt es so nicht.
Ich versuche schon seit stunden irgendwie rumzumachen, ich wollte
alle spezialisierungen angeben und nur für eine die BasisKlasse zurückgeben- das geht aber auch nicht wirklich:


C++:
template <> Basis_Klasse<double>*
Switch_Algorithm<double>::Get()
{
    return new Klasse3<double>();
}

template <> Basis_Klasse<int>*
Switch_Algorithm<int>::Get()
{
    return NULL;
}    



Oder ich versuche es so:

C++:
case 2:
   Klasse3<double>* a = NULL;
   Get(a);    




C++:
template <> void
Switch_Algorithm<double>::Get(Basis_Klasse<double> * a)
{
    a = new Klasse3<double>();
}

// z.B int typ
template <> void
Switch_Algorithm<int>::Get(Basis_Klasse<int>* a)
{
}    



die fehlermeldung lautet:


Code:
Switch_Algorithm.cpp:35: Fehler: expected initializer before »<« token
Switch_Algorithm.cpp:41: Fehler: expected initializer before »<« token    


Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.10.2007, 18:48 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



C++:
template <> void
Switch_Algorithm<double>::Get(Basis_Klasse<double> * a)
{
    a = new Klasse3<double>();
}



mal davon abgesehen das du so keinen pointer zurückgeben kannst,
kreidet er das "<>" an - die müssen da imho weg.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.10.2007, 19:13 Uhr
0xdeadbeef
Gott
(Operator)


Die <> sind da schon richtig, allerdings muss der Pointer per Referenz übergeben werden.

Allerdings würd ich das Problem anders angehen, und zwar

C++:
template<class T> Basis_Klasse<T>*
Switch_Algorithm<T>::Get_Algorithm(const int level)
{
    switch(level)
    {
        case 0:
            return new Klasse1<T>();
        case 1:
            return new Klasse2<T>();
    }
    return NULL;
}

template<> Basis_Klasse<double>*
Switch_Algorithm<double>::Get_Algorithm(const int level)
{
    switch(level)
    {
        case 0:
            return new Klasse1<double>();
        case 1:
            return new Klasse2<double>();
        case 2:
            return new Klasse3<double>();
    }
    return NULL;
}


Wenn ich die Aufgabe richtig verstehe, sollte das so hinhauen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: