Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Christian Zietz Newsgroups: de.sci.electronics Subject: Re: C++ method pointer? Date: Wed, 9 Mar 2016 20:03:59 +0100 Lines: 32 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 8bit X-Trace: individual.net Q4eW1zoSk7N2jV0k62YufQPOqwdXimYZs7iBpIaIMHsLFTqA== Cancel-Lock: sha1:mJfh/8sRtzJm93FZ44YkT/jYFRw= User-Agent: Mozilla/5.0 (Windows NT 6.0; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 In-Reply-To: Xref: csiph.com de.sci.electronics:203900 Hans-Peter Diettrich schrieb: > Ich dachte auch schon an eine Klasse pro Protokoll, nur bläht das die > Bibliothek auf. Im Quellcode vielleicht. Compiliert kommt ziemlich genau das heraus, was Du mit Deinen händischen Methodenpointern auch machen willst. Jede abgeleitete Klasse hat eine vtable mit einem Pointer auf ihre decode-Methode. > Virtuell scheint mir auch überflüssig, denn wenn man ein Objekt der > abgeleiteten Klasse erzeugen muß, dann kann man dessen Methoden auch > direkt aufrufen. Eben nicht. Du könntest z.B. sowas haben: AbstractDecoder* decoder = AbstractDecoder::createDecoder(x); decodeddata = decoder->decode(data); Je nach Wert von 'x' wird 'decoder' nun zur Laufzeit eine Instanz von SonyDecoder, NECDecoder usw. Trotzdem ruft decoder.decode() immer die passende decode-Methode (und nicht etwa die in AbstractDecoder) auf. Genau *dafür* brauchst Du virtuelle Methoden. => C++-Lehrbuch lesen. Wäre das hier eine C++-NG, würde ich Dir eben ein komplettes Beispiel hintippen, aber in d.s.e ist das doch arg off-topic. Christian -- Christian Zietz - CHZ-Soft - czietz (at) gmx.net WWW: http://www.chzsoft.de/ PGP/GnuPG-Key-ID: 0x52CB97F66DA025CA / 0x6DA025CA