 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Tom Müller Guest
|
Posted: Sun Oct 10, 2004 8:09 pm Post subject: (Teil-)Spezialisierung von Klassenmethoden |
|
|
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
|
Posted: Sun Oct 10, 2004 9:28 pm Post subject: Re: (Teil-)Spezialisierung von Klassenmethoden |
|
|
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
|
Posted: Mon Oct 11, 2004 7:10 am Post subject: Re: (Teil-)Spezialisierung von Klassenmethoden |
|
|
| 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
|
Posted: Mon Oct 11, 2004 6:16 pm Post subject: Re: (Teil-)Spezialisierung von Klassenmethoden |
|
|
<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
|
Posted: Tue Oct 12, 2004 1:54 pm Post subject: Re: (Teil-)Spezialisierung von Klassenmethoden |
|
|
| 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 |
|
 |
|
|
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
|
|