Как написать интерфейс и реализацию шаблонного класса в c++?
нельзя разделить хедер и реализацию шаблонного класса, это невозможно
Реализацию тоже в hpp.
Для каждого параметра T генерируется своя функция, а потому их потенциально бесконечно много, поэтому они должны быть доступны в исходном коде, а не линковаться отдельно.
Конечно, можно явно инстанцировать для нужных типов, но в вашем случае ни к чему.