Если вы хотите протестировать шаблон с несколькими типами, вы можете инициировать ручное создание экземпляров типов, например:
// at namespace level
template class Test<int>;
Явные экземпляры шаблонов классов автоматически запускают создание всех членов,кажется, это то, что вы хотите.
Фактическая проблема заключается в том, что язык предназначен для явного разрешения поведения, которого вы хотите избежать.Когда шаблон класса создается неявно, компилятор создает экземпляры только тех методов, которые используются .Основной вариант использования этой функции заключается в том, что некоторые методы могут предъявлять более строгие требования к экземпляру типа, чем другие, если бы все методы были созданы всегда , тогда шаблон класса мог бы использоваться только с теми типами, которые удовлетворяют более строгим требованиям.,
Позволяя компилятору создавать экземпляры только тех методов, которые используются, шаблон класса можно использовать с типами, которые не удовлетворяют всем требованиям всех методов, если они соответствуют требованиямметоды, которые на самом деле используются.
Типичным примером является operator[]
в std::map<>
, который требует, чтобы value_type
был конструируемым по умолчанию (operator[]
создаст новый объект по умолчанию инициализирован если ключ отсутствует в контейнере и возвращается ссылка на него).Поведение в языке позволяет использовать std::map
для типов, которые не конструируемые по умолчанию , если вы не используете operator[]
(или любую другую функцию-член, налагающую это требование).