Parametrisierung von Algorithmen mit Funktionsobjekten

Content

Vielfach ist es sehr sinnvoll, Algorithmen mit Funktionsobjekten zu parametrisieren. Dies erfolgt grundsätzlich über Template-Parameter, die das Funktionsobjekt über eine Referenz entgegennehmen.

Referenzen sind hier sinnvoll, da es theoretisch auch Funktionsobjekte geben kann, die weder kopierbar sind noch sich verschieben lassen. Hier als Beispiel ein Nachbau von std::find_if:

template<typename IT, typename P>
auto my_find_if(IT begin, IT end, P& predicate) {
   while (begin != end) {
      if (predicate(*begin)) break;
      ++begin;
   }
   return begin;
}

Aufgabe