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