Это Non-Virtual Interface Idiom (NVI). На этой странице у Херба Саттера есть много деталей об этом. Тем не менее, нравятся то, что вы читаете там, с тем, что говорит C++ FAQ Lite: here и here.
Основным преимуществом NVI является разделение интерфейса от реализации. Базовый класс может реализовать общий алгоритм и представить его миру, а его подклассы могут реализовать детали алгоритма с помощью виртуальных функций. Внешние пользователи защищены от изменений в деталях алгоритма, особенно если позже вы решите, что хотите добавить код до и после обработки.
Очевидным недостатком является то, что вам нужно написать дополнительный код. Кроме того, виртуальные функции private
сбивают с толку множество людей. Многие кодеры ошибочно полагают, что вы не можете их переопределить. Кажется, что Herb Sutter нравится private
виртуальным, но IMHO на практике лучше следовать рекомендации C++ FAQ Lite и сделать их protected
.