Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » bitweise ausgabe

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 ] > 2 <
010
04.09.2003, 11:23 Uhr
~unwissender
Gast


@ virtual
Kannst du mir erklären, warum du typename und nicht class ich deiner template-Methode verwendet hast.
Was bedeutet eigentlich typename?

Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
04.09.2003, 12:01 Uhr
virtual
Sexiest Bit alive
(Operator)


Inhaltlich sind class und typename an dieser Stelle komplett austauschbar. Ich persönlich bevorzuge typename, wenn als Templateparameter auch keine Klassen übergeben werden können oder der Templateparameter ein eingebauter Datentyp sein soll; class hingegen, wenn eine Klasse erwartet wird. Aber wie gesagt: wird nicht weiter ausgewrtet; ist egal ob typename oder class an dieser Stelle.

typename hat jedoch eine besondere Bedeutung in anderen Kontext. Nehmen wir mal (in der STL häufigen Fall):

C++:
template<class T>
class Something
{
public:
    typedef int size_type;
    ...
     size_type getSize();
};
...
template<class C>
void f(C& cont)
{
   C::size_type n = cont.getSize();
}


Was haben wir gemacht: Zunächst haben wir eine Templateklasse cont deklariert und dann dort einen Neuen Typen size_type Eingeführt. Das ganze wollen wir in einer Templatefunktion anwenden. Zwar sieht man als Mensch nahezu sofort, daß mit C::size_type ein Datentyp gemeint ist, Ein compiler sieht das jedoch nicht. Ähnliches gilt auch für dieses Unscheinbare Ding hier:

C++:
template<class C>
void f(C& cont)
{
   C::func(var); // Was ist das
}


Das könnte man als Funktionsaufruf sehen, aber eben auch als Dekalration einer Variablen namens var vom Typen C::func (Die Klammern wären also nur redundanter Unsinn). Um solcherlei Zweideutigkeiten auszuschliessen, wiurd das typename Keywort eingeführt:

C++:
template<class C>
void f(C& cont)
{
  typename  C::func(var); // Deklaration einer Variablen
}


Solche Effekte können nur im Zusammenhang mit Templates auftreten, dh genereall wird man das typename nur dann sinnvoll einsetzen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
04.09.2003, 14:05 Uhr
~unwissender
Gast


Ich danke dir!
Das zeigt einmal mehr, dass die Syntax von C++ überarbeitet werden sollte, schließlich ist typename nach deiner Erkärung nur ein Krückstock um mehrdeutige Syntax eindeutig zu machen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ 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: