Шаг 1: Вместо того, чтобы передавать все как отдельные аргументы, сгруппируйте аргументы в класс, скажем, X.
Шаг 2: Добавьте геттеры в класс X, чтобы получить соответствующую информацию. Вызываемый должен использовать получатели для получения информации, а не полагаться на параметры.
Шаг 3. Создайте интерфейсный класс, наследуемый классом X. Поместите все геттеры в интерфейс (в C ++ это как чисто виртуальные методы).
Шаг 4. Сделайте так, чтобы вызываемые методы зависели только от интерфейса.