🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.lang.c++
5 messages
5 total messages Started by Matthias Werner Tue, 16 Apr 1996 09:37
Funktionstemplate als Memberfunktion
#2135
Author: Matthias Werner
Date: Tue, 16 Apr 1996 09:37
40 lines
1511 bytes
hi,

ich kam in eine Situation, in der es mir guenstig erschien, eine
Memberfunction zu schreiben, die fuer alle moeglichen verschiedene Argumente
jeweils aehnlichen Code besitzt, also:

class X {
...
 X& f(int);
 X& f(double);
 X& f(void*);
...
};

wobei die Implementationen von X::f jeweils nur geringfuegig voneinander
abweichen.
MMN wuerde eine elegante (und typensiche) Implementation darin bestehen, 
dass f als Funktionstemplate deklariert wird.
Wuerde f global sein, so waere dies kein Problem.

template <class I> X& f(I i);

Jedoch geben meine Compiler (gcc 2.5.8 und BC 3.1) Fehlermeldungen
an beim Versuch

class X {
...
 template <class I> X& f(I);
...
};

zu deklarieren.
Warum ist dies nicht moeglich? Diese Moeglichkeit wird bei Stroustrup 
zumindest nicht explizit ausgeschlossen.
Ein Klassentemplate wuerde auch mir viele Klassen mit jeweils einer
Memberfunktion liefern, anstatt eine Klasse, deren Memberfunktion
fuer verschiedene Typen ueberladen wird.
Habe ich etwas am Template-Konzept falsch verstanden?

Matthias
Re: Funktionstemplate als Memberfunktion
#2136
Author: Andreas Willig
Date: Tue, 16 Apr 1996 11:01
37 lines
1361 bytes
Moin,

In article <4kvppn$pnl@hahn.informatik.hu-berlin.de>, mwerner@informatik.hu-berlin.de (Matthias Werner) writes:
|> hi,
.....
|> 
|> class X {
|> ...
|>  template <class I> X& f(I);
|> ...
|> };
|> 
|> zu deklarieren.
|> Warum ist dies nicht moeglich? Diese Moeglichkeit wird bei Stroustrup 
|> zumindest nicht explizit ausgeschlossen.

hmm, es ist, glaube ich, korrekter, aus der gesamten Klasse ein Template zu
machen, also:

template <class I> class X {
  ...

   X&  f(I);   // oder X& f(I i), falls du unbedingt einen Identifier deklarieren
               // willst

  ...
};

Gruss,

Andreas
-- 
Andreas Willig                       Die Spione des Kardinals sind ueberall!! 
Institut fuer Fernmeldetechnik       
Technische Universitaet Berlin       
willig@ftsu00.ee.tu-berlin.de         
Re: Funktionstemplate als Memberfunktion
#2140
Author: Enno Sandner
Date: Tue, 16 Apr 1996 11:31
47 lines
1925 bytes
Matthias Werner wrote:
> 
> hi,
> 
> ich kam in eine Situation, in der es mir guenstig erschien, eine
> Memberfunction zu schreiben, die fuer alle moeglichen verschiedene Argumente
> jeweils aehnlichen Code besitzt, also:
> 
> class X {
> ...
>  X& f(int);
>  X& f(double);
>  X& f(void*);
> ...
> };
> 
> wobei die Implementationen von X::f jeweils nur geringfuegig voneinander
> abweichen.
> MMN wuerde eine elegante (und typensiche) Implementation darin bestehen,
> dass f als Funktionstemplate deklariert wird.
> Wuerde f global sein, so waere dies kein Problem.
> 
> template <class I> X& f(I i);
> 
> Jedoch geben meine Compiler (gcc 2.5.8 und BC 3.1) Fehlermeldungen
> an beim Versuch
> 
> class X {
> ...
>  template <class I> X& f(I);
> ...
> };
> 
> zu deklarieren.
> Warum ist dies nicht moeglich? Diese Moeglichkeit wird bei Stroustrup
> zumindest nicht explizit ausgeschlossen.
> Ein Klassentemplate wuerde auch mir viele Klassen mit jeweils einer
> Memberfunktion liefern, anstatt eine Klasse, deren Memberfunktion
> fuer verschiedene Typen ueberladen wird.
> Habe ich etwas am Template-Konzept falsch verstanden?
> 

Nein,
sogenannte 'member-templates' sind im zukuenftigen Standard
enthalten (Auch wenn Dir das momentan wenig helfen wird ...)

	Enno
Re: Funktionstemplate als Memberfunktion
#2139
Author: Dietmar Kuehl
Date: Tue, 16 Apr 1996 11:32
21 lines
1156 bytes
Hi,
Matthias Werner (mwerner@informatik.hu-berlin.de) wrote:
: Jedoch geben meine Compiler (gcc 2.5.8 und BC 3.1) Fehlermeldungen
: an beim Versuch

: class X {
: ...
:  template <class I> X& f(I);
: ...
: };

: zu deklarieren.

Das ist nicht weiter verwunderlich: Zwar werden Member-Templates im C++
Standard enthalten sein, aber sie sind eine recht neue Ergaenzung, die
von den meisten Compilern noch nicht implementiert wird. Zukuenftige
Compiler werden Member-Templates unterstuetzen.
--
dietmar.kuehl@uni-konstanz.de
http://www.informatik.uni-konstanz.de/~kuehl/
I am a realistic optimist - that's why I appear to be slightly pessimistic
Re: Funktionstemplate als Memberfunktion
#2143
Author: Roland Schley
Date: Tue, 16 Apr 1996 13:53
51 lines
1927 bytes
Matthias Werner wrote:
> 
> hi,
> 
> ich kam in eine Situation, in der es mir guenstig erschien, eine
> Memberfunction zu schreiben, die fuer alle moeglichen verschiedene Argumente
> jeweils aehnlichen Code besitzt, also:
> 
> class X {
> ...
>  X& f(int);
>  X& f(double);
>  X& f(void*);
> ...
> };
> 
> wobei die Implementationen von X::f jeweils nur geringfuegig voneinander
> abweichen.
> MMN wuerde eine elegante (und typensiche) Implementation darin bestehen,
> dass f als Funktionstemplate deklariert wird.
> Wuerde f global sein, so waere dies kein Problem.
> 
> template <class I> X& f(I i);
> 
> Jedoch geben meine Compiler (gcc 2.5.8 und BC 3.1) Fehlermeldungen
> an beim Versuch
> 
> class X {
> ...
>  template <class I> X& f(I);
> ...
> };
> 
> zu deklarieren.
> Warum ist dies nicht moeglich? Diese Moeglichkeit wird bei Stroustrup
> zumindest nicht explizit ausgeschlossen.
> Ein Klassentemplate wuerde auch mir viele Klassen mit jeweils einer
> Memberfunktion liefern, anstatt eine Klasse, deren Memberfunktion
> fuer verschiedene Typen ueberladen wird.
> Habe ich etwas am Template-Konzept falsch verstanden?
> 
> Matthias

: Template member functions sollen erst in dem 
neuen C++ - Standard drin sein, im ARM steht nix 
davon. Die Deklaration waere korrekt, die Compiler 
kennen diese Syntax jedoch noch nicht, das ist 
alles.

Gruss
R.S.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads