Скажем, у меня есть шаблонный класс, определенный следующим образом
template <typename T>
class Temp{
// irrelevant
};
Я могу или неявно или явно создать его экземпляр:
Temp<int> ti;
template class Temp<char>;
С явным созданием экземпляра моя программа должна содержать экземпляр, даже если я не буду использовать его позже (предположим, он не опущен при оптимизации компилятора).
Мой вопрос заключается в том, вызывают ли следующие утверждения создание экземпляров класса?
typedef Temp<short> TShort;
using TFloat = Temp<float>; // C++11
Нет. Неявная реализация происходит только тогда, когда требуется полностью определенный тип; в то время как псевдоним типа не должен.
Когда код ссылается на шаблон в контексте, который требует полностью определенного типа, или когда полнота типа влияет на код, и этот конкретный тип не был явно создан, происходит неявная реализация. Например, когда создается объект этого типа, но не когда создается указатель на этот тип.
например Следующий код требует полностью определенный тип,
Temp<char> tc;
new Temp<char>;
sizeof(Temp<char>);
в то время как
Temp<char>* ptc;
не делает.
Других решений пока нет …