Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Der Dude

Treue Seele

  • »Der Dude« ist der Autor dieses Themas

Beiträge: 73

Wohnort: Elleringhausen-City

Beruf: ITA

  • Private Nachricht senden

1

25.10.2004, 17:21

Templatefunktionen

Hallo,

gibt es die Möglichkeit bestimmte Templatefunktionen nur für einen Type zu schreiben? Zum Beispiel nur eine Instanz vom Type int soll auch die Funktion asdf() benutzen können. Eine Instanz vom Type float würde diese Funktion erst gar nicht sehen.

Mfg
Der Dude
"Wenn ich morgens doppelt so schnell über den Flur laufe, kann ich 2 Minuten länger schlaften!" - leider war es ein Irrtum.

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

2

25.10.2004, 18:16

Hi,

sicher ist das möglich, bestes Beispiel ist std::num_limits :) Guck Dir den Code einfach in der <limits> an :)

- Patrick

PD

unregistriert

3

25.10.2004, 18:43

Ich versteh das prob net wirklich, wenn man ne template funktion macht will man doch normal das möglichst viele typen die Funktion benutzen können oO

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

4

25.10.2004, 18:47

Jain,

man sollte aber auch templates für bestimmte Typen ausrichten können z.B. als Specialfeature.

Guck Dir mal die std::num_limits an, dann siehste wieso das oft Vorteilhaft ist :)

- Patrick

PD

unregistriert

5

25.10.2004, 21:02

Haste da mal ne Referenz zu? Find da grad nix zu und Google schmeißt auch nix brauchbares raus :)

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

6

25.10.2004, 21:06

guck doch in dein compilerverzeichnis datei limits (ohne H)

Dave

Alter Hase

Beiträge: 757

Wohnort: Berlin

  • Private Nachricht senden

7

25.10.2004, 21:08

oder schau in die msdn: http://msdn.microsoft.com/

PD

unregistriert

8

25.10.2004, 21:15

Ah, also verhält sich die Klasse nur anders je nach typ den man... öhm... fürs template "übergibt" (wie sacht man das?? ^^)
Lässt sich das bei Funktionen nicht auch über die Parameter regeln durch Überladen?

Was mich schon ne weile intressiert wozu ich aber noch nix gefunden habe: Wo ist bei templates der Unterschied zwischen blabla <class T> und <typename T> ??

9

26.10.2004, 06:22

Man kann ein Template für einen bestimmten Typ festlegen. Das nennt sich dann spezialisieren.

Das schöne an den spezialisierten Templates ist, das man sie sogar aus einer DLL exportieren kann.


Machen kann man das schnell:

C-/C++-Quelltext

1
2
3
4
 template<> void foo([T] var)
{
  // mache was

}

Das "T" wird dann einfach durch den jeweiligen Typ ersetzt.

Durch die Spezialisierung kann man das verhalten eines Templates an einen Typ anpassen. Z.B. für eine Funktion equal. Zwei variablen mit einander zu vergleich ist np. Dumm wird es nur wenn beide Typen ein char* sind. Dafür kann man dann einen spezielle Version der equal Funktion erstellen, die dann wircklich einen Stringvergleich durchführt.


Zitat

Was mich schon ne weile intressiert wozu ich aber noch nix gefunden habe: Wo ist bei templates der Unterschied zwischen blabla <class T> und <typename T> ??

Einen echten Unterschied gibt es nicht. Der Größte ist das bei typename mehr zu schreiben ist. Bei spezifizieren einen Template Typ.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

PD

unregistriert

10

26.10.2004, 11:56

Zitat

Durch die Spezialisierung kann man das verhalten eines Templates an einen Typ anpassen. Z.B. für eine Funktion equal. Zwei variablen mit einander zu vergleich ist np. Dumm wird es nur wenn beide Typen ein char* sind. Dafür kann man dann einen spezielle Version der equal Funktion erstellen, die dann wircklich einen Stringvergleich durchführt.


Ah, also ist das wie überladen einer Funktion mit dem unterschied das es eine "default" Funktion für alle typen gibt wo die Funktion nicht explizit deklariert wurde? Ich glaub nu hab ichs endlich kapiert *g*

Werbeanzeige