Поскольку пользователь вашего кода должен видеть полное определение функции func1
, его реализация или реализация вспомогательной функции могут быть скрыты.
Но если вы переместите реализацию в еще один файл , пользователю будет только предъявлено объявление шаблона :
//templates.h
template< typename T > void f1( T& );
#include <templates_impl.h> // post-inclusion
И определение:
// templates_impl.h
template< typename T > void f1_helper( T& ) {
}
template< typename T > void f1( T& ) {
// the function body
}