Поделиться через


Экземпляр шаблона класса

В отличие от функций, создав шаблоны шаблон класса, необходимо явно создать экземпляр класса с передачей аргументов шаблонов класса.Создание экземпляра TempClass.

TempClass< float, 6 > test1;       // OK
TempClass< char, items++ > test2;  // Error, second parameter 
                                   // must be constant.

Компилятор создает код для класса или функции шаблона, когда класс и функция создается.Функция-член, создаются при вызове функции-члена и фактически создаются при его построении. классЭто может вызвать проблемы при построении библиотеки с шаблонами для других пользователей.Дополнительные сведения см. в разделе Явное создание экземпляра.

Шаблон класса сначала специализирован а затем создается компилятором.Компилятор не создавайте шаблон класса до тех пор, пока не выполнена ссылка на член этого класса шаблона, sizeof используется на классе или экземпляр.

Явная специализация шаблона настраиванная версию шаблона для указанного типа.

// template_instantiation2.cpp
template<class T> class X
{
};

// Explicit specialization of X with 'int'
template<> class X<int>
{
};
int main()
{
}

Явная специализация пределами template<> выдаст ошибку.До версии Visual C++ Visual C++ .NET 2003 приняли следующий синтаксис:

// Explicit specialization of X with 'char'
class X<char> // C2906
{
};

Если шаблон явно создан или специализирован раз, он не может быть создан или явно не специализировал во второй раз в одной программе для одного набора аргументов шаблона.Дальнейшие специализации с другими аргументами шаблона допускаются.

Если нет явных создание экземпляра или специализации для указанного аргумента шаблона, то шаблон будет неявно создается в той точке, где сначала он используется.

Поскольку различных экземпляров одного шаблона различных типов, статические элементы для одного специализации или экземпляр шаблона отличается от статических элементов для разных специализации или создания экземпляров одного шаблона.

См. также

Ссылки

Шаблоны класса