Допустим, у меня есть следующий код:
// templateClass.h
#ifndef TEMPLATE_CLASS_H
#define TEMPLATE_CLASS_H
template <typename T>
class tClass
{
public:
tClass();
};
#endif
// templateClassDef.inl
#ifndef TEMPLATE_CLASS_DEF_INL
#define TEMPLATE_CLASS_DEF_INL
template <typename T>
tClass<T>::tClass()
{
}
#endif
// normalClass.h
#include "templateClass.h"
class normal
{
public:
normal();
};
// normalClass.cpp
#include "normalClass.h"
#include "templateClassDef.inl"
normal::normal()
{
tClass<int> a;
}
// main.cpp
#include "templateClass.h"
#include "templateClassDef.inl"
#include "normalClass.h"
int main()
{
tClass<int> a;
normal b;
return 0;
}
Обратите внимание, что файл inl
НЕ включен в заголовок, как обычно, но вместо этого включен в исходные файлы (яосознавать, что это не стандартный способ ... это всего лишь пример).Обратите внимание, что normalcClass.cpp
создает экземпляр tClass<int>
, как и main.cpp
.
. Мне любопытно, должен ли компилятор создавать создание экземпляра из класса шаблона каждый раз, когда он встречает явное создание экземпляра, учитывая егоодин и тот же тип (то есть tClass<int>
) , хотя оба экземпляра происходят в отдельных единицах перевода (normalClass.cpp
и main.cpp
)?Кроме того, будет ли это увеличиваться во время компиляции (если ответ на предыдущий вопрос да, он снова его создаст , тогда это также должно быть да )?