Сходу можно придумать два варианта:
1. Виртуальные методы и наследование: у родителя объявляете виртуальные методы, в наследнике реализовываете. Это наиболее жесткий способ построить архитектуру, как результат, меньше шансов налажать при рефакторинге и разработке большой толпой.
2. Функторы - помягче и посвободнее, меньше связности, гибче архитктура
В зависимости от архитектуры, могут подойти разные трюки с шаблонами, но это надо хорошо знать задачу.
Общее правило - не тащить в свое мышление методы и подходы из других языков, даже если они вам нравятся. Это правило появилось сразу после того, как после Фортрана начали как грибы после дождя появляться альтернативы для академического программирования - Паскаль в частности.
Антипаттерн звучит как "Я на любом языке программирования пишу как на Фортране, вариация - "Пишу на С++ как на С", и так далее.
Языки программирования тем и отличатся, что кроме синтаксиса, тащат за собой еще и устоявшиеся подходы к организации архитектуры.