То, что происходит под капотом в большинстве реализаций C ++, почти то, что вы предлагаете. Компилятор обычно разрешает вызов Strategy.virtualMethod () следующим образом (в псевдокоде):
(Strategy.pVtable[indexOfVirtualMethod])()
Так что, если ваша единственная забота - это еще одна разыменование указателя (pVtable), вам следует сначала создать профиль, если вы не можете определить более серьезные горячие точки.
Мне кажется, что ваш код будет намного сложнее понять и поддерживать, когда вы используете указатель на функцию вместо объекта стратегии.