Если речь идёт о шаблоне, который будет полностью переносим. То обязательно. Я думаю отличным примером этого является STL. Есть один вариант, это объявить все типы, которые будут использовать данный шаблон в файле реализации, однако это будет работать только в рамках вашего проекта. Если речь идёт о создании шаблона "под ключ" - то, как бы это ни было печально, всё придётся писать в хидере.
да, реализация шаблонов ТОЛЬКО в хидер-файлах и последствия этого - вообще отдельная тема для разговора
Ну как бы не обязательно
Если речь идёт о шаблоне, который будет полностью переносим. То обязательно. Я думаю отличным примером этого является STL. Есть один вариант, это объявить все типы, которые будут использовать данный шаблон в файле реализации, однако это будет работать только в рамках вашего проекта. Если речь идёт о создании шаблона "под ключ" - то, как бы это ни было печально, всё придётся писать в хидере.