Hallo zusammen
Zur Vermeidung doppelter Klassennamen im rpihddevice-Plugin bin ich auf der Suche nach einer eleganten, pragmatischen Lösung. Folgende Ausgangslage:
- ein cAudioDecoder decodiert Audio
- ein cAudioParser wird exklusiv von cAudioDecoder verwendet, um die Frames zu parsen.
Nun gibt es aber im VDR bereits ein Klasse, die cAudioDecoder heisst - doof!
Mein favorisierter Ansatz wäre folgender, vereinfacht dargestellt:
Die Deklaration von cAudioDecoder in audio.h:
class cAudioDecoder : public cThread
{
public:
cAudioDecoder();
private:
Foo();
class cParser *m_parser;
};
Alles anzeigen
Der AudioParser ist nun innerhalb von cAudioDecoder deklariert, um Verwechslungen vorzubeugen. Da niemand anderes den Parser benötigt, klingt das schon mal sinnvoll. Zudem ist die Klasse nur einfach deklariert, um das Header-File möglichst schlank zu halten.
Die Implementation von cAudioDecoder in audio.c:
#include "audio.h"
class cAudioDecoder::cParser
{
cParser() { /* ... */ }
Bar() { /* ... */ }
};
cAudioDecoder::cAudioDecoder() :
cThread(),
m_parser(new cParser())
{ /* ... */ }
cAudioDecoder::Foo()
{
m_parser->Bar();
}
Alles anzeigen
Hier wird nun cAudioDecoder implementiert und - was ich nicht wusste, dass das mit verschachtelten Klassen möglich ist - cAudioDecoder::cParser deklariert und implemeniert.
Meine Frage an die C++-Experten: Übersehe ich was? Ist das kompletter Murks? Ich persönlich finde die Variante recht elegant und der Compiler beklagt sich auch nicht.
Vielen Dank für eure Inputs!
Gruss
Thomas