Ich habe ein Lehrbuch über elementare Datenstrukturen gelesen, nur um einen Überblick zu bekommen - es ist schon eine Weile her, dass ich meine eigene Hashtabelle oder einen roten/schwarzen Baum geschrieben habe :)
Jedenfalls bin ich auf etwas gestoßen, das mich ein wenig verwirrt hat. Der Autor ist ziemlich darauf bedacht, die Initialisierungsliste für jedes Mitglied zu verwenden (wie man hoffen würde), aber in diesem einen Fall, in dem er einen Funktionszeiger an eine Hashing-Funktion übergibt, entscheidet er sich dafür, den Zuweisungsoperator im Konstruktor zu verwenden, anstatt den Zeiger in der Initialisierungsliste einzurichten (und er verwendet die Initialisierungsliste auch in diesem Code):
template<class DataType>
HashTable<DataType>::HashTable(int (*hf)(const DataType&), int s)
: table(s)
{
hashfunc = hf;
}
wo:
int (*hashfunc)(const DataType&);
ist ein privates Mitglied.
Ich habe mich gefragt, ob es einen ausdrücklichen Grund für diese Entscheidung gibt und ob er hier eine Falle übersehen hat - oder ob es nur ein zufälliges Versehen war. Funktionszeiger können eine interessante Syntax haben, und ich habe mich grundsätzlich gefragt, ob das in diesem Bereich ein Problem darstellt.