Article View: de.comp.lang.c++
Article #861Re: Templates in g++?
From: Enno Sandner
Date: Thu, 23 Nov 1995 19:55
Date: Thu, 23 Nov 1995 19:55
34 lines
1683 bytes
1683 bytes
thomas@wmaz1.uni-wuppertal.de (Thomas Fritzsche):
>wie kann ich bei einer Template-Klasse abfragen, welcher "Typ fuer des
>Template" verwendet wurde? Ist das ueberhaupt moeglich?
Ich verstehe die Frage evtl. falsch, aber ich nehme mal an Du willst
fuer unterschiedliche Typen unterschiedliche Implementierung haben,
um zB. Builtin-Typen optimiert zu behandeln. Das laesst sich mittels
Template-Spezialisierung erreichen. Bsp:
---
#include <iostream.h>
template<class T> struct A { void Do(); };
void A<int> :: Do() { cout << "int-impl\n"; }
void A<char> :: Do() { cout << "char-impl\n"; }
template<class T> void A<T> :: Do() { cout << "gen-impl\n"; }
int main()
{
A<int>().Do(); A<char>().Do(); A<float>().Do();
return 0;
}
---
Bei neueren Compilern die RTTI unterstuetzen kann man auch den 'typeid'
Ausdruck verwenden. Bsp:
if (typeid(T)==typeid(int)) DoThis(); else DoThat();
Template-Spezialisierung ist aber IMHO der bessere Weg um typspezifisches
Verhalten bei Templates zu realisieren, da die einzelnen Implementierung
sauber voneinander getrennt sind.
Gruss
Enno
Technical Details
Message-ID:
<ENNO.95Nov23205507@kitz.inferenzsysteme.informatik.th-darmstadt.de>Path:
arc1-ca.pugleaf.net!news.th-darmstadt.de!news!ennoReferences:
<491sa6$gb@wmwap1.math.Uni-Wuppertal.DE>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.th-darmstadt.de!news!enno From: enno@inferenzsysteme.informatik.th-darmstadt.de (Enno Sandner) Newsgroups: de.comp.lang.c++ Subject: Re: Templates in g++? Date: 23 Nov 1995 19:55:07 GMT Organization: Fachbereich Informatik, TH Darmstadt Distribution: world Message-ID: <ENNO.95Nov23205507@kitz.inferenzsysteme.informatik.th-darmstadt.de> References: <491sa6$gb@wmwap1.math.Uni-Wuppertal.DE> NNTP-Posting-Host: kitz.intellektik.informatik.th-darmstadt.de In-reply-to: thomas@wmaz1.uni-wuppertal.de's message of 23 Nov 1995 13:17:58 GMT