Вопрос

Что подразумевается под делегатами в С++, является ли функция сортировки в c/С++, которая принимает функцию/функтор сравнения в качестве последнего параметра, формой делегата?

Это было полезно?

Решение

«Делегировать» на самом деле не является частью терминологии C++.В C# это что-то вроде прославленного указателя на функцию, который может хранить адрес объекта, а также вызывать функции-члены.Вы, конечно, можете написать что-то подобное на C++ как небольшую библиотечную функцию.Или еще более общий:Объединить boost::bind<> с boost::function<>.

В C++ мы используем термин «объект функции».Функциональный объект — это что угодно (включая указатели на функции), которое можно «вызвать» с помощью оператора вызова функции().

std::sort принимает «предикат», который представляет собой специальный объект функции, который не изменяет свои аргументы и возвращает логическое значение.

Другие советы

Функции обратного вызова в C++ можно (в общих чертах) назвать формой delegates ( хотя delegate термин для этого не используется).Функции обратного вызова используют указатели на функции для передачи их в качестве параметров другим функциям.Но делегаты в C# более продвинуты по сравнению с функциями обратного вызова в C++.

Делегировать работу – значит разделить рабочую нагрузку с другими.В реальной жизни, если бы вы делегировали свою задачу, то есть если бы вы были менеджером, вы бы делились своей работой, ожидая, что другие выполнят задачу, а вы не должны знать, как это сделать.

Концепция одинакова в C++ и любых других языках, имеющих возможность делегатов.В C вы можете увидеть это как делегат:

int calculate(int (*func)(int c), int a, int b)

Потому что ожидается, что вы отправите указатель на другую функцию, которая выполнит за вас некоторую работу.Недавно я написал Сообщение блога об указателях функций в Python и C, посмотрите, возможно, это вам поможет.Возможно, это не «традиционный» способ делегирования работы в C или C++, но опять же, терминология говорит, что я немного прав.

Делегация в основном используется как способ передачи функций функциям, встроенным в класс (pimpl, агрегация, частное наследование).В основном это (встроенные) функции одной строки, вызывающие функции классов-членов.Насколько я знаю, это не имеет никакого отношения к делегатам C#.

В этом смысле указатель на функцию, используемый в qsort, является не делегатом, а обратным вызовом, в котором модули инфраструктуры могут быть расширены пользовательским программным обеспечением, как в примере Голливудский принцип.

Делегат:Объект, который действует как многофункциональный указатель с системой подписки.Это действительно упрощает использование статических или «объектных» указателей на функции-члены для уведомлений об обратном вызове и обработки событий.

Этот ссылка объясняет делегатов в доступной форме, или вы также можете обратиться к MSDN связь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top