Возможно, вы ищете реализацию команды в Modern C ++ Design.
boost :: function имеет столько же накладных расходов, сколько необходимо для выполнения того, что она делает.Его цель - позволить вам передать «указатель» на любую функцию, которая может реагировать на ее интерфейс.Если вам не нужно такое поведение, тогда эти накладные расходы являются реальными накладными расходами.Если вы это сделаете, то, честно говоря, я не вижу лучшего подхода, чем boost :: function (он даже оптимизирован, чтобы в некоторых реализациях вы не получили кучу дополнительного использования памяти от виртуальных функций).
Можно создать метод, который приведет к возможно встроенному коду, но как только вы попытаетесь сохранить его в универсальном интерфейсе, вы получите служебные данные boost :: function (возможно, больше).
ЧтоЯ бы порекомендовал просто использовать boost :: function до тех пор, пока вы не обнаружите, что вам действительно нужно заменить его чем-то более быстрым.ТОГДА, и только тогда вы пишете шаблон различной сложности, чтобы это произошло.
Простого сохранения boost :: function может быть вполне достаточно для того, что вам нужно.Вы также можете посмотреть на boost :: сигналы.