Почему функторы C ++ могут быть предпочтительнее объектов с именованными методами?

Я недавно увлекся функторами и использовал их повсюду. Затем возникла ситуация, когда мне нужен был мой функтор для выполнения двух разных операций, и я подумал о добавлении еще одного метода к моему функтору (не перегружая оператор ()). Является ли это плохой практикой, я не уверен (возможно, вы мне скажете), но это заставило меня задуматься о том, почему я вообще использую функторы, а не только объекты. Итак, мой вопрос:

Есть ли что-нибудь особенное в перегрузке оператора () или это просто немного более синтаксически привлекательно, чем использование обычных именованных методов?

Обновление:

Во-первых, я знаю, почему функторы могут быть предпочтительнее для указателей функций, как описано в других вопросах. Я хочу знать, почему они могут быть предпочтительнее объектов с именованными методами.

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

7
задан Robert Harvey 5 April 2011 в 03:26
поделиться