Информация об изменениях

Сообщение Re: Инлайнинг функции сравнения от 14.02.2023 14:44

Изменено 14.02.2023 14:45 Qbit86

Re: Инлайнинг функции сравнения
Здравствуйте, cppguard, Вы писали:

C>Адепты часто любят приводить пример с сортировкой, мол, только в С++ можно вставить функцию сравнения непосредственно в тело сортировки (умалчивая, правда, что от каждой такой вставки бинарник жиреет как боров), а в остальных языках приходится довольствоваться компараторами.


Да нет, такое даже в .NET будет работать при определённых условиях. Правда, нужно брать достаточно новые версии API, где компаратаор передаётся не как интерфейс IComparer<T> (динамический run-time полиморфизм), а как параметр дженерика с констрейнтом TComparer where TComparer : IComparer<T> (статический полиморфизм, мономорфизация на этапе JIT-компиляции):
public static void Sort<T, TComparer>(this Span<T> span, TComparer comparer)
    where TComparer : IComparer<T>?
Re: Инлайнинг функции сравнения
Здравствуйте, cppguard, Вы писали:

C>Адепты часто любят приводить пример с сортировкой, мол, только в С++ можно вставить функцию сравнения непосредственно в тело сортировки (умалчивая, правда, что от каждой такой вставки бинарник жиреет как боров), а в остальных языках приходится довольствоваться компараторами.


Да нет, такое даже в .NET будет работать при определённых условиях. Правда, нужно брать достаточно новые версии API, где компаратаор передаётся не по старинке как интерфейс IComparer<T> (динамический run-time полиморфизм), а как параметр дженерика с констрейнтом TComparer where TComparer : IComparer<T> (статический полиморфизм, мономорфизация на этапе JIT-компиляции):
public static void Sort<T, TComparer>(this Span<T> span, TComparer comparer)
    where TComparer : IComparer<T>?