std::sort - implementacja funkcji z parametrem Compare (?)

std::sort - implementacja funkcji z parametrem Compare (?)
WM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 112
0

Hey, chciałem się zapytać jak w C++ jest zaimplementowana klasa std::sort, która jako trzeci argument przyjmuje obiekt klasy Compare a w rzeczywistości może przyjmować dowolny obiekt z przeładowanym operatorem() (funktorem)?
Rozumiałbym, gdyby to był wskaźnik na funkcję, ale to jest jakaś klasa - więc dlaczego kompilator się nie wkurza, że podajemy obiekt innej klasy?

Jak taką funkcję (mówię o std::sort) samemu zaimplementować?

Domyślam się, że jeden z konstruktorów przyjmuje jako argument wskaźnik do funkcji typu:

Kopiuj
class Compare {
Compare(bool(*wsk)(int,int));
}

ale to przecież nie przejdzie dla funktorów, które są przecież metodami klas i wymagają podania informacji o klasie... Więc zastanawiam się jak to jest zrobione?

Z góry dzięki za rozjaśnienie sprawy ;-)

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
2

To jest szablon. Przyjmie wszystko, co można wywołać jako f(l,r), gdzie l i r są typu zwracanego przez operator* iteratora. Aha, typ zwracany przez f musi być konwertowalny do bool.

WM
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 112
0

O raju, rzeczywiście. Już kapuję ;-).
Dzięki!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.