Еще одна возможность - передать поток параметров в алгоритмы. Алгоритм может принимать ссылку на ParameterStream.
Производные алгоритмы будут затем извлекать соответствующие типы (количество) параметров из потока соответственно. Поток реализует безопасное извлечение (десериализацию) параметров типа, а также может реализовать (при желании) управление версиями.
Эта возможность ИМХО будет иметь преимущество в том, что вы можете сохранить интерфейс неизменным, даже если в будущем для разных алгоритмов потребуется другое количество параметров.
Таким образом, в основном вы отправляете параметр, который содержит сериализованную форму нужных вам параметров, и вы десериализуете / проверяете их по мере необходимости в реализации алгоритма.
Как уже упоминалось в предыдущих постерах, шаблоны также могут быть полезны, если во время компиляции все четко.