C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

(Teil-)Spezialisierung von Klassenmethoden

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Tom Müller
Guest





PostPosted: Sun Oct 10, 2004 8:09 pm    Post subject: (Teil-)Spezialisierung von Klassenmethoden Reply with quote



Hallo,

nachdem ich dies schon vor einigen Tagen versehentlich in
de.comp.os.unix.programming gepostet habe nun noch mal in der richtigen
Newsgroup:

Ich habe folgendes Problem: Eine Template-Klasse wurde bisher vor allem
für diverse Gleitkommatypen entwickelt. Nun soll diese Klasse auch mit
komplexen Gleitkommatypen arbeiten. Dazu müssen jedoch einzelne Methoden
umprogrammiert werden (ohne die ganze Klasse neu zu programmieren).
Bisher habe ich dazu für die betreffenden Methoden eine vollständige
Spezialisierung für std::complex<double> vorgenommen. Nachteil dieser
Lösung ist jedoch, daß ich die Methoden dann für jeden Gleitkommatyp neu
spezialisieren müßte. Kann man so etwas auch durch eine "allgemeine
Spezialisierung" für std::complex<type> machen? Wie müßte eine so
spezialisierte Methode aussehen?

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Torsten Robitzki
Guest





PostPosted: Sun Oct 10, 2004 9:28 pm    Post subject: Re: (Teil-)Spezialisierung von Klassenmethoden Reply with quote



Tom Müller wrote:

Quote:
Hallo,

nachdem ich dies schon vor einigen Tagen versehentlich in
de.comp.os.unix.programming gepostet habe nun noch mal in der richtigen
Newsgroup:

Ich habe folgendes Problem: Eine Template-Klasse wurde bisher vor allem
für diverse Gleitkommatypen entwickelt. Nun soll diese Klasse auch mit
komplexen Gleitkommatypen arbeiten. Dazu müssen jedoch einzelne Methoden
umprogrammiert werden (ohne die ganze Klasse neu zu programmieren).
Bisher habe ich dazu für die betreffenden Methoden eine vollständige
Spezialisierung für std::complex<double> vorgenommen. Nachteil dieser
Lösung ist jedoch, daß ich die Methoden dann für jeden Gleitkommatyp neu
spezialisieren müßte. Kann man so etwas auch durch eine "allgemeine
Spezialisierung" für std::complex<type> machen? Wie müßte eine so
spezialisierte Methode aussehen?


Allg:
template <class T>
class foo {};

Spezialisiert für std::complex:
template <class T>
class foo<std::complex {};

mfg Torsten

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Tom Müller
Guest





PostPosted: Mon Oct 11, 2004 7:10 am    Post subject: Re: (Teil-)Spezialisierung von Klassenmethoden Reply with quote



Quote:
Allg:
template <class T
class foo {};

Spezialisiert für std::complex:
template class foo {};

Jetzt ist aber doch die ganze Klasse spezialisiert. Ich wollte aber nur
einzelne Methoden der Klasse spezialisieren. Folgendes Beispiel:

template <class T>
class foo {
public:
void func_1(){};
void func_2(){};

};

Nun soll z.B. lediglich func_1 für std::complex<T> spezialisiert werden.
func_2 soll unverändert erhalten bleiben, d.h. ggf. vom Compiler
automatisch für std::complex<T> instanziert werden.

Die konkrete Klasse hat etwa 30 Methoden. Von denen muß ich gerade mal
etwa 5 für std::complex<T> anders implementieren. Deshalb wäre es sehr
unschön die übrigen 25 Methoden noch mal für die spezialisierte Klasse
zu kopieren und dann bei Änderungen am Code die Änderungen immer gleich
doppelt vornehmen zu müssen.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Torsten Robitzki
Guest





PostPosted: Mon Oct 11, 2004 6:16 pm    Post subject: Re: (Teil-)Spezialisierung von Klassenmethoden Reply with quote

<snip>
Quote:
Die konkrete Klasse hat etwa 30 Methoden. Von denen muß ich gerade mal
etwa 5 für std::complex<T> anders implementieren. Deshalb wäre es sehr
unschön die übrigen 25 Methoden noch mal für die spezialisierte Klasse
zu kopieren und dann bei Änderungen am Code die Änderungen immer gleich
doppelt vornehmen zu müssen.



Funktionen können nicht spezialisiert werden, sie können allenfalls
überladen werden. In Deinem Beispiel würde sich es evtl. anbieten, die
25 gemeinsammen Funktionen in eine Basisklasse zu verlagern und die
restlichen unterschiedlichen Funktionen in zwei ableitende,
spzialisierte Klassen zu verlagern:

template <class T>
struct base {
void func_2();
};

template <class T>
struct derived : base {
void func_1();
};

template <class T>
struct derived<std::complex : base {
void func_1();
};

So, ich hoffe ich hab es jetzt besser getroffen ;-)

mfg Torsten

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Tom Müller
Guest





PostPosted: Tue Oct 12, 2004 1:54 pm    Post subject: Re: (Teil-)Spezialisierung von Klassenmethoden Reply with quote


Quote:


Funktionen können nicht spezialisiert werden, sie können allenfalls
überladen werden. In Deinem Beispiel würde sich es evtl. anbieten, die
25 gemeinsammen Funktionen in eine Basisklasse zu verlagern und die
restlichen unterschiedlichen Funktionen in zwei ableitende,
spzialisierte Klassen zu verlagern:

template <class T
struct base {
void func_2();
};

template struct derived : base {
void func_1();
};

template struct derived : base {
void func_1();
};

So, ich hoffe ich hab es jetzt besser getroffen ;-)

mfg Torsten



Ja, vielen Dank.

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.