Вы уверены, что время связано со звонками? Может ли это быть сама функция, где стоимость? Если это так, то простое встраивание может привести к исчезновению функции из вашего профилировщика, но вы не увидите большого ускорения.
Предполагая, что на самом деле накладные расходы на выполнение стольких виртуальных вызовов ограничены тем, что вы можете сделать, не делая вещи не виртуальными.
Если у звонка есть ранние выходы для таких вещей, как время / флаги, то я часто буду использовать двухуровневый подход. Проверка выполняется не виртуальным вызовом, при этом поведение, специфичное для класса, вызывается только при необходимости.
1007 * Е.Г. *
class Foo
{
public:
inline void update( void )
{
if (can_early_out)
return;
updateImpl();
}
protected:
virtual void updateImpl( void ) = 0;
};