/* feedback bij reeks 9 * PROBLEEM : quickSort * INHOUD FEEDBACK : uitleg over gebruik meet-functie */ OPM 1 Probleem: Bij de oproep van de meet-functie zoals hieronder, komt er een foutmelding. PerformantieMeter pm; pm.meet(10, maakMeetFunctie(quicksort,v)); waarbij quicksort gedeclareerd werd als template void quicksort(std::vector & v){...} Foutmelding: error: no matching function for call to `maakMeetFunctie(, std::vector >&)' Reden: Deze 'quicksort' is geen functie maar een 'function template'. Je moet de template-parameter specifieren: PerformantieMeter pm; pm.meet(10, maakMeetFunctie(quicksort,v)); Dit gaat uiteraard enkel als v een vector van int is! In het algemeen is het niet mogelijk om function of class templates door te geven aan functies!! (Tenzij met een preprocessor truc) OPM 2 Geconstateerd: Bovenstaande code (zie OPM 1) is wel correct, maar doet waarschijnlijk niet wat je verwacht!! Immers, v wordt niet telkens opnieuw geïnitialiseerd. Als je bovenstaande quicksort een aantal keer (=X) laat lopen (zoals de for-lus in PerformantieMeter::meet aangeeft), dan heb je waarschijnlijk X-1 keer een reeds gesorteerde vector opnieuw aan quicksort doorgegeven (met verschillende performantie!!). Oplossing: Als je voor elke test bepaalde initialisatiecode wil uitvoeren, moet je een klasse afleiden van MeetFunctie en de methodes 'doe_voor' en 'doe_tijdens' overriden. opm. de 'maakMeetFunctie()'s zijn "convenience functions" om snel een MeetFunctie te maken zonder init-code.