Есть ли когда-нибудь польза / использование функтора пустоты? - PullRequest
0 голосов
/ 13 февраля 2020

Можно ли когда-нибудь использовать функтор с типом возврата void?

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

Есть ли польза от использования пустотного функтора?

1 Ответ

0 голосов
/ 13 февраля 2020

Существует множество вариантов использования для функторов, которые не возвращают значения (так же, как существует множество вариантов использования для функций, которые не возвращают значения). Первое, что приходит мне на ум, - кнопка в графическом интерфейсе пользователя (GUI). Как правило, структура GUI определяет способ назначения обратного вызова, который будет вызываться при нажатии кнопки. В рамках, на которые я смотрел, этот обратный вызов ничего не возвращает - ни через возвращаемое значение, ни через выходной параметр. Если каркас был написан для C, обратный вызов, вероятно, предоставляется как указатель на функцию. Если каркас был написан для C ++, обратный вызов, вероятно, предоставляется как функциональный объект (функтор) для большей гибкости.

Например, использует обратные вызовы в виде sigc::slot объектов , Документация подтверждает, что это "функторы": "Слот - это объект, который выглядит и ощущается как функция, но на самом деле является объектом. Они также известны как объекты функций или функторы. " Для указанного c случая нажатия кнопки слот должен соответствовать прототипу для Gtk::Button::signal_clicked(), который равен void function_name(). То есть, чтобы ваша кнопка что-то сделала, вы используете функтор, который не принимает параметров и возвращает void. Полезно.

...