2014-09-02 2 views
6

Предположим, у меня есть:Модель памяти функции шаблона внутри класса без шаблона?

template <typename T> 
class A 
{ 
    //Do something with T 
}; 

Я знаю, что компилятор будет генерировать class A<T> для каждого отдельного T, определенной в коде.

Что делать, если у меня есть:

class B 
{ 
    template <typename T> 
    void f() { /* Do something with T */ } 
}; 

Будет ли только одно определение class B но несколько перегруженные f() для каждого отдельного T это называется с?

+1

Да. Что еще это может быть? –

+3

Ом Уровень сборки не содержит определений классов. Каждый метод класса скомпилирован в глобальную функцию со скрытым «этим» параметром. Функция Templated скомпилирована для глобальной функции для каждого экземпляра типа в каждом блоке компиляции. –

+0

Возможный дубликат? [Класс с шаблонной функцией-членом, это тот же класс?] (Http://stackoverflow.com/questions/11121910/class-with-templated-member-function-is-the-same-class) –

ответ

1

Да, с каждым экземпляром f<T> будет определено значение f(), сгенерированное компилятором.
В зависимости от компилятора f() может быть оптимизирован из-за вставки или он может просто приобрести столько места в сегменте кода.

Однако, я редко сталкивался с такой конструкцией, где у вас есть нестатическая функция члена шаблона (без каких-либо аргументов!) Внутри класса без шаблона.

Смежные вопросы