Path: csiph.com!feeder.erje.net!2.eu.feeder.erje.net!newsreader4.netcologne.de!news.netcologne.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Hans-Peter Diettrich Newsgroups: de.sci.electronics Subject: Re: C++ method pointer? Date: Wed, 09 Mar 2016 20:11:30 +0100 Lines: 47 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 8bit X-Trace: individual.net NrdktZ1rYoifgsjRYsbNswLejZDpdrgpgcuSRbPtKTnKrTZfTr Cancel-Lock: sha1:fHgU2z52w++oVA2HVZXVGxDd0fk= User-Agent: Thunderbird 2.0.0.21 (Windows/20090302) In-Reply-To: Xref: csiph.com de.sci.electronics:203902 Thorsten Böttcher schrieb: > Am 09.03.2016 um 18:14 schrieb Hans-Peter Diettrich: >> Problem: eine Klasse implementiert mehrere (gleichartige) Methoden, von >> denen eine bestimmte zur Laufzeit aufgerufen werden soll. Leider sind >> meine C++ Kenntnisse sehr angestaubt, ich komme nicht drauf wie sich das >> mit einem Methoden-Pointer erledigen läßt :-( > > Kann man machen, ist aber unschön. Stichwort Funktoren. > Um Memberfunktionen aufzurufen brauchst Du den Zeiger auf das Objekt. Deshalb wollte ich ja die Methode innerhalb des Objekts aufrufen, dann ist die Instanz ja bereits bekannt (this). > Wieviel verschiedene Dekoder gibt es denn? Etwa 10, Tendenz steigend. Zudem hätte ich gerne noch eine Möglichkeit, die empfangenen Codes über Tabellen in einen einfacheren Datentyp umzuwandeln, z.B. '0'-'9' für numerische Tasten. Das sollte aber möglichst ohne komplizierte Programmierung gehen, die meisten Benutzer haben noch viel weniger Ahnung von C++ als ich ;-) > Entweder Du baust Dir ein Interface, und erzeugst Dir passende Objekte > je nachdem was Du brauchst, Das riecht für mich nach einem Template, und da kenne ich mich auch nicht (mehr) aus :-( > oder Du erledigst das einfach mit ner > if-Abfrage, oder mit einem switch case Block. > > begin(IRecv::DecodeNEC); > > IRecv::read() > { > if (decoder==DecoderNEC) > return decodeNEC; > else > return decodeSony(); > } Das hat den Nachteil, daß alle angegebenen Decoder ins Programm eingebunden werden, und das möchte ich vermeiden. Der Linker ist ja schon so clever, daß er unbenutze Methoden wegläßt, man muß nur noch vermeiden, daß diese irgendwo in der Bibliothek referenziert werden. Danke fürs Mitdenken DoDi