🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #755

Re: Problem mit Templates

#755
From: Karl-Heinz Krause
Date: Wed, 08 Nov 1995 17:57
86 lines
3344 bytes
Am 7. Nov. 95 schrieb REDHAWK@doomsday.shnet.org:

> Am Dienstag, den 07.11.95 hatte REDHAWK folgendes mitzuteilen:
> =============================================================================

> Hallo

> Ich versuche seit langem template functions in mein Hauptprogramm einzubinden  
> und zwar mit Hilfe einer Header-Datei. Es kommt aber immer nur die Meldung  
> 'undefined symbol() in modul()..'. Auf einer UNIX-Oberfläche läuft es, aber  
> bei meinem DOS-PC (BC 4.5) nicht. Breymann 'C++ Eine Einführung' schreibt,  
> daß es nicht möglich ist templates als Header-Datei einzubinden, sondern nur  
> als kompletten Quelltext. Fall es euch hilft, hier die Struktur meines  
> Programms:

> --MAIN.CPP--
> #include <iostream.h>
> #include "func.h"
> void main();
> {                                       <== Das ist hier nur ein kleines
>         cout << funcb(1,2);                 Beispiel, zeigt aber die
> }                                           Problematik

> --FUNC.H--
> template <class typ>
> typ funcb(typ a,typ b);

> --FUNC.CPP--
> template <class typ>
> typ funcb(typ a,typ b)
> {       return (a*b);
> }

> Ich hoffe, daß mir irgend jemand da draußen helfen kann, da selbst mein Info- 
> Prof verzweifelt!

Templates sind eine Sache in C++, die bis heute noch nicht wirklich
sauber definiert ist. Aus diesem Grunde verhalten sich die einzelnen
Compiler immer noch etwas anders. Am einfachsten wäre es, sich
ausschließlich auf inline-Templates zu beschränken, deren Definition
dann vollständig in den Header-Dateien steht. Das funktioniert nämlich
mit jedem Compiler, sofern der überhaupt Templates unterstützt.

Falls eine Template-Funktion zu groß ist für eine inline-Definition,
überleg Dir zuerst, ob man nicht Dinge daraus in eine nicht-Template-
Funktion auslagern und so die Template-Funktion auf eine inline-Funktion
reduzieren kann.

Wenn das nicht so ohne weiteres möglich ist, dann muß man sich notge-
drungen auf die Eigenschaften des jeweiligen Compilers einlassen. Bei
Borland C++ müssen Template-Definitionen vollständig im Header stehen,
auch wenn sie nicht inline sind. Leider gibt es auch Compiler, bei denen
das nicht möglich ist. Wer möchte, daß sein Programm sich von ver-
schiedenen Compilern übersetzen läßt, kommt deshalb um #ifdef nicht
herum. Beispiel:

 --FUNC.H--
 template <class typ>
 typ funcb(typ a,typ b);

 #ifdef BORLAND
 template <class typ>
 typ funcb (typ a, typ b)
 { return a*b; }
 #endif


 --FUNC.CPP--
 #ifndef BORLAND
 template <class typ>
 typ funcb (typ a, typ b)
 { return a*b; }
 #endif


 --MAIN.CPP--
 #include <iostream.h>
 #include "func.h"
 void main();
 { 
   cout << funcb(1,2);  
 }



Karl-Heinz Krause
Technical Details
Message-ID: <47qr1j$fhp@news00.btx.dtag.de>
Path: arc1-ca.pugleaf.net!news00.btx.dtag.de!not-for-mail
References: <5xPMTJTG6FB@redgo.doomsday.SHNET.ORG>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news00.btx.dtag.de!not-for-mail
From: Krause@btx.dtag.de (Karl-Heinz Krause)
Newsgroups: de.comp.lang.c++,fido.c_plusplus_ger,maus.lang.c,z-netz.sprachen.c
Subject: Re: Problem mit Templates
Date: 8 Nov 1995 17:57:07 GMT
Organization: Telekom Online Internet Gateway
Message-ID: <47qr1j$fhp@news00.btx.dtag.de>
References: <5xPMTJTG6FB@redgo.doomsday.SHNET.ORG>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Sender: 0913148778-0001@btx.dtag.de (Karl-Heinz Krause)
X-Newsreader: Forte Free Agent 1.0.82