Данный шаблон класса похож на следующее:
template<typename Type, typename IDType=typename Type::IDType>
class Mappings
{
public:
...
Type valueFor(const IDType& id) { // return value }
...
};
Как кто-то может объявить этот класс в заголовочном файле?
Вот как бы вы это сделали:
template<typename Type, typename IDType=typename Type::IDType>
class Mappings;
template<typename Type, typename IDType>
class Mappings
{
public:
...
Type valueFor(const IDType& id) { // return value }
...
};
Обратите внимание, что по умолчанию используется в предварительной декларации, а не в фактическом определении.
Вы можете объявить аргументы по умолчанию для шаблона только для первого объявления шаблона. Если вы хотите разрешить пользователям переадресовывать объявление класса, вы должны предоставить заголовок пересылки. Если вы хотите переслать объявление шаблона класса другого человека, используя значения по умолчанию, вам не повезло!