Если у вас есть много методов с похожими сигнатурами, различающимися только по типу, шаблонный метод - путь:
struct Example
{
void load_from(std::istream&);
void load_from(Database_Table&);
void load_from(Some_Device&);
};
Шаблонный метод допускает некоторое расширение:
struct Example_Template_Method
{
template <class Input_Source>
void load_from(Input_Source&);
};
Ключевым моментом здесь является то, что template
позволяет методу, функции или алгоритму работать с различными типами объектов без изменения алгоритма. Это также может относиться и к интерфейсам.