Генерация кода на С++ для кода, не зависящего от шаблона
Учитывая следующий код:
template<typename T>
struct A
{
void f(){...}
friend T;
};
template<typename T>
struct B
{
void f(T){...}//code depends on T
void g(){...}//code doesn't depends on T
}
Как видите, "код" в struct A
не зависит от T
.
Будет ли компилятор генерировать другой код в последнем двоичном файле для каждого T
, используемого для создания экземпляра A
?
Тот же вопрос для функции B::g()
, будет ли компилятор использовать одну и ту же функцию для всех экземпляров B<T>
, когда это возможно, например this
не используется в g()
, поэтому не зависит от T
? Имеет ли стандарт какой-либо спецификации для этого случая?
Ответы
Ответ 1
Если вы хотите быть уверенным в том, что генерирует компилятор, почему бы не написать структуру без шаблона, реализующую код, который не зависит от T, а затем вывести свой шаблон из не-шаблона? Вы получаете одну копию кода без шаблона, который наследует каждый экземпляр шаблона.
По крайней мере, это то, что я делал в прошлом, когда обнаружил, что экземпляр шаблона делал мои скомпилированные объекты очень большими.