Все это конечно хорошо, но практического смысла мало..., что если потребуется добавить новый тип?
Нельзя сделать инстанциацию темплейта для заранее неизвестного типа. Выход один добавлять все в хедер-файл.
Об инкапсуляции надо думать в другом месте

(кода)